AWS - Elastic Beanstalk Enum

Support HackTricks

Elastic Beanstalk

Amazon Elastic Beanstalk надає спрощену платформу для розгортання, управління та масштабування веб-додатків і сервісів. Вона підтримує різноманітні мови програмування та фреймворки, такі як Java, .NET, PHP, Node.js, Python, Ruby та Go, а також контейнери Docker. Сервіс сумісний з широко використовуваними серверами, включаючи Apache, Nginx, Passenger та IIS.

Elastic Beanstalk надає простий і гнучкий спосіб розгортання ваших додатків у хмарі AWS, без необхідності турбуватися про підлягаючу інфраструктуру. Він автоматично обробляє деталі забезпечення потужності, балансування навантаження, масштабування та моніторингу здоров'я додатків, дозволяючи вам зосередитися на написанні та розгортанні вашого коду.

Інфраструктура, створена Elastic Beanstalk, управляється Autoscaling групами в EC2 (з балансувальником навантаження). Це означає, що в кінці дня, якщо ви компрометуєте хост, вам слід знати про EC2:

Більше того, якщо використовується Docker, можливо використовувати ECS.

Додатки та середовища

У AWS Elastic Beanstalk концепції "додатка" та "середовища" виконують різні функції та мають різні ролі в процесі розгортання.

Додаток

  • Додаток в Elastic Beanstalk є логічним контейнером для вихідного коду вашого додатка, середовищ та конфігурацій. Він об'єднує різні версії коду вашого додатка та дозволяє вам керувати ними як єдиним цілим.

  • Коли ви створюєте додаток, ви надаєте ім'я та опис, але на цьому етапі ресурси не забезпечуються. Це просто спосіб організувати та керувати вашим кодом та супутніми ресурсами.

  • Ви можете мати кілька версій додатка в межах одного додатка. Кожна версія відповідає конкретному випуску вашого коду, який може бути розгорнутий в одному або кількох середовищах.

Середовище

  • Середовище є забезпеченою інстанцією вашого додатка, що працює на інфраструктурі AWS. Це місце, де ваш код додатка розгортається та виконується. Elastic Beanstalk забезпечує необхідні ресурси (наприклад, EC2 інстанції, балансувальники навантаження, групи автоматичного масштабування, бази даних) на основі конфігурації середовища.

  • Кожне середовище виконує одну версію вашого додатка, і ви можете мати кілька середовищ для різних цілей, таких як розробка, тестування, стадіювання та продуктивність.

  • Коли ви створюєте середовище, ви вибираєте платформу (наприклад, Java, .NET, Node.js тощо) та тип середовища (наприклад, веб-сервер або робітник). Ви також можете налаштувати конфігурацію середовища, щоб контролювати різні аспекти інфраструктури та налаштувань додатка.

2 типи середовищ

  1. Середовище веб-сервера: Воно призначене для хостингу та обслуговування веб-додатків та API. Ці додатки зазвичай обробляють вхідні HTTP/HTTPS запити. Середовище веб-сервера забезпечує ресурси, такі як EC2 інстанції, балансувальники навантаження та групи автоматичного масштабування, щоб обробляти вхідний трафік, управляти потужністю та забезпечувати високу доступність додатка.

  2. Середовище робітника: Воно призначене для обробки фонових завдань, які часто є трудомісткими або ресурсомісткими операціями, що не вимагають негайних відповідей клієнтам. Середовище робітника забезпечує ресурси, такі як EC2 інстанції та групи автоматичного масштабування, але не має балансувальника навантаження, оскільки не обробляє HTTP/HTTPS запити безпосередньо. Натомість воно споживає завдання з черги Amazon Simple Queue Service (SQS), яка діє як буфер між середовищем робітника та завданнями, які воно обробляє.

Безпека

При створенні додатка в Beanstalk є 3 дуже важливі параметри безпеки для вибору:

  • EC2 ключова пара: Це буде SSH ключ, який зможе отримати доступ до EC2 інстанцій, що виконують додаток.

  • IAM профіль інстанції: Це профіль інстанції, який матимуть інстанції (IAM привілеї).

  • Автоматично згенерована роль називається aws-elasticbeanstalk-ec2-role і має деякі цікаві доступи до всіх ECS, всіх SQS, DynamoDB elasticbeanstalk та elasticbeanstalk S3, використовуючи керовані політики AWS: AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWorkerTier.

  • Роль служби: Це роль, яку використовуватиме AWS сервіс для виконання всіх необхідних дій. Наскільки мені відомо, звичайний користувач AWS не може отримати доступ до цієї ролі.

  • Ця роль, згенерована AWS, називається aws-elasticbeanstalk-service-role і використовує керовані політики AWS AWSElasticBeanstalkEnhancedHealth та AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy

За замовчуванням версія метаданих 1 вимкнена:

Вразливість

Дані Beanstalk зберігаються в S3 бакеті з наступною назвою: elasticbeanstalk-<region>-<acc-id> (якщо він був створений у консолі AWS). Усередині цього бакету ви знайдете завантажений вихідний код додатка.

URL створеної веб-сторінки є http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/

Якщо ви отримаєте доступ на читання до бакету, ви зможете читати вихідний код і навіть знайти чутливі облікові дані в ньому.

Якщо ви отримаєте доступ на запис до бакету, ви зможете модифікувати вихідний код, щоб компрометувати IAM роль, яку використовує додаток наступного разу, коли він буде виконаний.

Перерахування

# Find S3 bucket
ACCOUNT_NUMBER=<account_number>
for r in us-east-1 us-east-2 us-west-1 us-west-2 ap-south-1 ap-south-2 ap-northeast-1 ap-northeast-2 ap-northeast-3 ap-southeast-1 ap-southeast-2 ap-southeast-3 ca-central-1 eu-central-1 eu-central-2 eu-west-1 eu-west-2 eu-west-3 eu-north-1 sa-east-1 af-south-1 ap-east-1 eu-south-1 eu-south-2 me-south-1 me-central-1; do aws s3 ls elasticbeanstalk-$r-$ACCOUNT_NUMBER 2>/dev/null && echo "Found in: elasticbeanstalk-$r-$ACCOUNT_NUMBER"; done

# Get apps and URLs
aws elasticbeanstalk describe-applications # List apps
aws elasticbeanstalk describe-application-versions # Get apps & bucket name with source code
aws elasticbeanstalk describe-environments # List envs
aws elasticbeanstalk describe-environments | grep -E "EndpointURL|CNAME"
aws elasticbeanstalk describe-configuration-settings --application-name <app_name> --environment-name <env_name>
aws elasticbeanstalk describe-environment-resources --environment-name <env_name> # Get env info such as SQS used queues
aws elasticbeanstalk describe-instances-health --environment-name <env_name> # Get the instances of an environment

# Get events
aws elasticbeanstalk describe-events

Неавтентифікований доступ

Персистентність

Підвищення привілеїв

Після експлуатації

Підтримайте HackTricks

Last updated