AWS - Elastic Beanstalk Enum

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

애플리케이션 및 환경

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 키 쌍: 이는 앱을 실행하는 EC2 인스턴스에 접근할 수 있는 SSH 키입니다.

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

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

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

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

기본적으로 메타데이터 버전 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

인증되지 않은 접근

AWS - Elastic Beanstalk Unauthenticated Enum

지속성

AWS - Elastic Beanstalk Persistence

권한 상승

AWS - Elastic Beanstalk Privesc

포스트 익스플로잇

AWS - Elastic Beanstalk Post Exploitation
HackTricks 지원하기

Last updated