# AWS - Elastic Beanstalk Enum

{{#include ../../../banners/hacktricks-training.md}}

## Elastic Beanstalk

Amazon Elastic Beanstalkは、**ウェブアプリケーションとサービスのデプロイ、管理、スケーリング**のための簡素化されたプラットフォームを提供します。Java、.NET、PHP、Node.js、Python、Ruby、Goなどのさまざまなプログラミング言語とフレームワーク、Dockerコンテナをサポートしています。このサービスは、Apache、Nginx、Passenger、IISなどの広く使用されているサーバーと互換性があります。

Elastic Beanstalkは、**AWSクラウドにアプリケーションをデプロイするためのシンプルで柔軟な方法**を提供し、基盤となるインフラストラクチャについて心配する必要がありません。**自動的に**キャパシティの**プロビジョニング**、負荷**バランシング**、**スケーリング**、アプリケーションの健康**モニタリング**の詳細を処理し、コードの作成とデプロイに集中できるようにします。

Elastic Beanstalkによって作成されたインフラストラクチャは、**EC2**の**オートスケーリング**グループによって管理されます（負荷バランサー付き）。つまり、最終的には、**ホストを侵害した場合**、EC2について知っておくべきです：

{{#ref}}
aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
{{#endref}}

さらに、Dockerが使用されている場合、**ECS**を使用することも可能です。

{{#ref}}
aws-eks-enum.md
{{#endref}}

### アプリケーションと環境

AWS Elastic Beanstalkでは、「アプリケーション」と「環境」の概念は異なる目的を持ち、デプロイプロセスにおいて異なる役割を果たします。

#### アプリケーション

- Elastic Beanstalkのアプリケーションは、**アプリケーションのソースコード、環境、および設定の論理コンテナ**です。異なるバージョンのアプリケーションコードをグループ化し、単一のエンティティとして管理できます。
- アプリケーションを作成する際には、名前と**説明を提供しますが、この段階ではリソースはプロビジョニングされません**。これは単にコードと関連リソースを整理し管理する方法です。
- アプリケーション内には**複数のアプリケーションバージョン**を持つことができます。各バージョンは、特定のリリースに対応し、1つ以上の環境にデプロイできます。

#### 環境

- 環境は、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](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWebTier)、[AWSElasticBeanstalkMulticontainerDocker](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkMulticontainerDocker)、[AWSElasticBeanstalkWorkerTier](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/AWSElasticBeanstalkWorkerTier)。
- **サービスロール**：これは、**AWSサービスが必要なすべてのアクションを実行するために使用するロール**です。私の知る限り、通常のAWSユーザーはそのロールにアクセスできません。
- AWSによって生成されたこのロールは**`aws-elasticbeanstalk-service-role`**と呼ばれ、AWS管理ポリシー[AWSElasticBeanstalkEnhancedHealth](https://us-east-1.console.aws.amazon.com/iam/home#/policies/arn:aws:iam::aws:policy/service-role/AWSElasticBeanstalkEnhancedHealth)および[AWSElasticBeanstalkManagedUpdatesCustomerRolePolicy](https://us-east-1.console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/aws-elasticbeanstalk-service-role?section=permissions)を使用しています。

デフォルトでは、**メタデータバージョン1は無効**です：

<figure><img src="../../../images/image (103).png" alt=""><figcaption></figcaption></figure>

### エクスポージャー

Beanstalkデータは、次の名前の**S3バケット**に保存されます：**`elasticbeanstalk-<region>-<acc-id>`**（AWSコンソールで作成された場合）。このバケット内には、アップロードされた**アプリケーションのソースコード**が含まれています。

作成されたウェブページの**URL**は**`http://<webapp-name>-env.<random>.<region>.elasticbeanstalk.com/`**です。

> [!WARNING]
> バケットに**読み取りアクセス**がある場合、**ソースコードを読み取る**ことができ、そこに**機密資格情報**を見つけることもできます。
>
> バケットに**書き込みアクセス**がある場合、次回実行される際に**アプリケーションが使用しているIAMロールを侵害するために**ソースコードを**変更する**ことができます。

### 列挙
```bash
# 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
```
### 認証されていないアクセス

{{#ref}}
../aws-unauthenticated-enum-access/aws-elastic-beanstalk-unauthenticated-enum/README.md
{{#endref}}

### 永続性

{{#ref}}
../aws-persistence/aws-elastic-beanstalk-persistence/README.md
{{#endref}}

### 権限昇格

{{#ref}}
../aws-privilege-escalation/aws-elastic-beanstalk-privesc/README.md
{{#endref}}

### ポストエクスプロイト

{{#ref}}
../aws-post-exploitation/aws-elastic-beanstalk-post-exploitation/README.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
