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가 생성하는 인프라는 EC2Autoscaling 그룹(로드 밸런서 포함)에 의해 관리됩니다. 즉, 결국 호스트를 손상시키면 EC2에 대해 알아야 합니다:

AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum

또한, Docker가 사용되는 경우 ECS를 사용할 수 있습니다.

AWS - EKS Enum

Application & Environments

AWS Elastic Beanstalk에서 "애플리케이션"과 "환경"의 개념은 배포 과정에서 다른 목적과 역할을 수행합니다.

Application

  • Elastic Beanstalk의 애플리케이션은 애플리케이션의 소스 코드, 환경 및 구성의 논리적 컨테이너입니다. 애플리케이션 코드를 다양한 버전으로 그룹화하여 단일 엔터티로 관리할 수 있습니다.

  • 애플리케이션을 생성할 때 이름과 설명을 제공하지만, 이 단계에서는 리소스가 프로비저닝되지 않습니다. 이는 코드 및 관련 리소스를 조직하고 관리하는 방법일 뿐입니다.

  • 애플리케이션 내에 여러 애플리케이션 버전을 가질 수 있습니다. 각 버전은 특정 릴리스의 코드를 나타내며, 하나 이상의 환경에 배포될 수 있습니다.

Environment

  • 환경은 AWS 인프라에서 실행되는 애플리케이션의 프로비저닝된 인스턴스입니다. 이는 애플리케이션 코드가 배포되고 실행되는 곳입니다. Elastic Beanstalk는 환경 구성에 따라 필요한 리소스(예: EC2 인스턴스, 로드 밸런서, 자동 스케일링 그룹, 데이터베이스)를 프로비저닝합니다.

  • 각 환경은 애플리케이션의 단일 버전을 실행하며, 개발, 테스트, 스테이징, 프로덕션 등 다양한 목적을 위해 여러 환경을 가질 수 있습니다.

  • 환경을 생성할 때 플랫폼(예: Java, .NET, Node.js 등)과 환경 유형(예: 웹 서버 또는 워커)을 선택합니다. 또한 인프라 및 애플리케이션 설정의 다양한 측면을 제어하기 위해 환경 구성을 사용자 정의할 수 있습니다.

2 types of Environments

  1. Web Server Environment: 웹 애플리케이션 및 API를 호스팅하고 제공하도록 설계되었습니다. 이러한 애플리케이션은 일반적으로 들어오는 HTTP/HTTPS 요청을 처리합니다. 웹 서버 환경은 EC2 인스턴스, 로드 밸런서 및 자동 스케일링 그룹과 같은 리소스를 프로비저닝하여 들어오는 트래픽을 처리하고 용량을 관리하며 애플리케이션의 고가용성을 보장합니다.

  2. Worker Environment: 백그라운드 작업을 처리하도록 설계되었습니다. 이러한 작업은 일반적으로 시간이 많이 걸리거나 리소스를 많이 소모하는 작업으로, 클라이언트에 즉각적인 응답이 필요하지 않습니다. 워커 환경은 EC2 인스턴스 및 자동 스케일링 그룹과 같은 리소스를 프로비저닝하지만, HTTP/HTTPS 요청을 직접 처리하지 않기 때문에 로드 밸런서가 없습니다. 대신, Amazon Simple Queue Service (SQS) 큐에서 작업을 소비하여 워커 환경과 처리할 작업 간의 버퍼 역할을 합니다.

Security

Beanstalk에서 앱을 생성할 때 선택해야 하는 3가지 매우 중요한 보안 옵션이 있습니다:

  • EC2 key pair: 이는 앱을 실행하는 EC2 인스턴스에 접근할 수 있는 SSH 키입니다.

  • IAM instance profile: 이는 인스턴스가 가지는 인스턴스 프로필입니다 (IAM 권한).

  • 자동 생성된 역할은 **aws-elasticbeanstalk-ec2-role**이라고 하며, AWS 관리 정책을 사용하여 모든 ECS, 모든 SQS, DynamoDB elasticbeanstalk 및 elasticbeanstalk S3에 대한 흥미로운 접근 권한을 가지고 있습니다: AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWorkerTier.

  • Service role: 이는 AWS 서비스가 필요한 모든 작업을 수행하는 데 사용하는 역할입니다. 일반 AWS 사용자는 해당 역할에 접근할 수 없습니다.

  • AWS에서 생성한 이 역할은 **aws-elasticbeanstalk-service-role**이라고 하며, AWS 관리 정책 AWSElasticBeanstalkEnhancedHealthAWSElasticBeanstalkManagedUpdatesCustomerRolePolicy를 사용합니다.

기본적으로 메타데이터 버전 1은 비활성화되어 있습니다:

Exposure

Beanstalk 데이터는 S3 버킷에 저장되며, 이름은 다음과 같습니다: elasticbeanstalk-<region>-<acc-id>(AWS 콘솔에서 생성된 경우). 이 버킷 안에는 업로드된 애플리케이션의 소스 코드가 있습니다.

생성된 웹페이지의 URL은 **http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/**입니다.

버킷에 대한 읽기 권한을 얻으면 소스 코드를 읽고 심지어 민감한 자격 증명을 찾을 수 있습니다.

버킷에 대한 쓰기 권한을 얻으면 소스 코드를 수정하여 애플리케이션이 다음에 실행될 때 IAM 역할을 손상시킬 수 있습니다.

Enumeration

# 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

인증되지 않은 접근

AWS - Elastic Beanstalk Unauthenticated Enum

지속성

AWS - Elastic Beanstalk Persistence

권한 상승

AWS - Elastic Beanstalk Privesc

사후 익스플로잇

AWS - Elastic Beanstalk Post Exploitation
HackTricks 지원

Last updated