AWS - Elastic Beanstalk Enum
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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, deine Anwendungen in der 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 du dich auf das Schreiben und Bereitstellen deines Codes konzentrieren kannst.
Die Infrastruktur, die von Elastic Beanstalk erstellt wird, wird von Autoscaling-Gruppen in EC2 (mit einem Lastenausgleich) verwaltet. Das bedeutet, dass du am Ende des Tages, wenn du den Host kompromittierst, über EC2 Bescheid wissen solltest:
Darüber hinaus, wenn Docker verwendet wird, ist es möglich, ECS zu verwenden.
In AWS Elastic Beanstalk dienen die Konzepte einer "Anwendung" und einer "Umgebung" unterschiedlichen Zwecken und haben unterschiedliche Rollen im Bereitstellungsprozess.
Eine Anwendung in Elastic Beanstalk ist ein logischer Container für den Quellcode, die Umgebungen und die Konfigurationen deiner Anwendung. Sie gruppiert verschiedene Versionen deines Anwendungscodes und ermöglicht es dir, sie als eine einzige Einheit zu verwalten.
Wenn du eine Anwendung erstellst, gibst du einen Namen und eine Beschreibung an, aber es werden zu diesem Zeitpunkt keine Ressourcen bereitgestellt. Es ist einfach eine Möglichkeit, deinen Code und die zugehörigen Ressourcen zu organisieren und zu verwalten.
Du kannst mehrere Anwendungsversionen innerhalb einer Anwendung haben. Jede Version entspricht einer bestimmten Veröffentlichung deines Codes, die in einer oder mehreren Umgebungen bereitgestellt werden kann.
Eine Umgebung ist eine bereitgestellte Instanz deiner Anwendung, die auf der AWS-Infrastruktur läuft. Es ist der Ort, an dem dein Anwendungscode bereitgestellt und ausgeführt wird. Elastic Beanstalk stellt die notwendigen Ressourcen (z. B. EC2-Instanzen, Lastenausgleicher, Auto-Scaling-Gruppen, Datenbanken) basierend auf der Umgebungs-Konfiguration bereit.
Jede Umgebung führt eine einzelne Version deiner Anwendung aus, und du kannst mehrere Umgebungen für verschiedene Zwecke haben, wie Entwicklung, Test, Staging und Produktion.
Wenn du eine Umgebung erstellst, wählst du eine Plattform (z. B. Java, .NET, Node.js usw.) und einen Umgebungs-Typ (z. B. Webserver oder Worker). Du kannst auch die Umgebungs-Konfiguration anpassen, um verschiedene Aspekte der Infrastruktur und der Anwendungseinstellungen zu steuern.
Webserver-Umgebung: Sie ist dafür ausgelegt, Webanwendungen und APIs zu hosten und bereitzustellen. Diese Anwendungen verarbeiten 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.
Worker-Umgebung: Sie ist dafür 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 Lastenausgleicher, da sie keine HTTP/HTTPS-Anfragen direkt verarbeitet. 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.
Beim Erstellen einer App in Beanstalk gibt es 3 sehr wichtige Sicherheitsoptionen zu wählen:
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, AWSElasticBeanstalkMulticontainerDocker, 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 auf diese Rolle nicht zugreifen.
Diese von AWS generierte Rolle heißt aws-elasticbeanstalk-service-role
und verwendet die von AWS verwalteten Richtlinien AWSElasticBeanstalkEnhancedHealth und AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy
Standardmäßig ist Metadatenversion 1 deaktiviert:
Beanstalk-Daten werden in einem S3-Bucket mit dem folgenden Namen gespeichert: elasticbeanstalk-<region>-<acc-id>
(wenn es in der AWS-Konsole erstellt wurde). In diesem Bucket findest du den hochgeladenen Quellcode der Anwendung.
Die URL der erstellten Webseite ist http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/
Wenn du Lesezugriff auf den Bucket erhältst, kannst du den Quellcode lesen und sogar sensible Anmeldeinformationen darin finden.
Wenn du Schreibzugriff auf den Bucket erhältst, könntest du den Quellcode ändern, um die IAM-Rolle zu kompromittieren, die die Anwendung beim nächsten Ausführen verwendet.
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)