AWS - Elastic Beanstalk Enum

htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요!

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에 대해 알아야 합니다:

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

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

pageAWS - 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**이라고 하며 모든 ECS, 모든 SQS, DynamoDB elasticbeanstalk 및 elasticbeanstalk S3에 대한 액세스 권한을 가지며 AWS 관리 정책을 사용합니다: AWSElasticBeanstalkWebTier, AWSElasticBeanstalkMulticontainerDocker, AWSElasticBeanstalkWorkerTier.

  • 서비스 역할: AWS 서비스가 필요한 모든 작업을 수행하는 데 사용하는 역할입니다. 내가 알기로 일반 AWS 사용자는 해당 역할에 액세스할 수 없습니다.

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

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

### 노출

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

생성된 웹페이지의 URLhttp://<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

인증되지 않은 액세스

pageAWS - Elastic Beanstalk Unauthenticated Enum

지속성

pageAWS - Elastic Beanstalk Persistence

Privesc

pageAWS - Elastic Beanstalk Privesc

후반 공격

pageAWS - Elastic Beanstalk Post Exploitation
htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 영웅이 되는 AWS 해킹을 배우세요!

HackTricks를 지원하는 다른 방법:

最終更新