mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-30 06:30:35 -08:00
Translated ['src/pentesting-ci-cd/cloudflare-security/cloudflare-domains
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
# AWS - EC2, EBS, SSM & VPC ポストエクスプロイテーション
|
||||
# AWS - EC2, EBS, SSM & VPC ポストエクスプロイト
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## EC2 & VPC
|
||||
|
||||
詳細については、次を確認してください:
|
||||
詳細については、以下を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-ec2-ebs-elb-ssm-vpc-and-vpn-enum/
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
### **悪意のあるVPCミラー -** `ec2:DescribeInstances`, `ec2:RunInstances`, `ec2:CreateSecurityGroup`, `ec2:AuthorizeSecurityGroupIngress`, `ec2:CreateTrafficMirrorTarget`, `ec2:CreateTrafficMirrorSession`, `ec2:CreateTrafficMirrorFilter`, `ec2:CreateTrafficMirrorFilterRule`
|
||||
|
||||
VPCトラフィックミラーリングは、**VPC内のEC2インスタンスのために、インバウンドおよびアウトバウンドトラフィックを複製します**。これは、インスタンス自体に何もインストールする必要がありません。この複製されたトラフィックは、一般的にネットワーク侵入検知システム(IDS)などに送信され、分析および監視されます。\
|
||||
VPCトラフィックミラーリングは、**VPC内のEC2インスタンスのインバウンドおよびアウトバウンドトラフィックを複製**し、インスタンス自体に何もインストールする必要がありません。この複製されたトラフィックは、一般的にネットワーク侵入検知システム(IDS)などに送信され、分析および監視されます。\
|
||||
攻撃者はこれを悪用して、すべてのトラフィックをキャプチャし、そこから機密情報を取得することができます:
|
||||
|
||||
詳細については、このページを確認してください:
|
||||
@@ -23,7 +23,7 @@ aws-malicious-vpc-mirror.md
|
||||
|
||||
### 実行中のインスタンスのコピー
|
||||
|
||||
インスタンスには通常、何らかの機密情報が含まれています。内部に入る方法はいくつかあります([EC2特権昇格トリック](../../aws-privilege-escalation/aws-ec2-privesc.md)を確認してください)。ただし、含まれているものを確認する別の方法は、**AMIを作成し、それから新しいインスタンスを実行することです(自分のアカウントであっても)**:
|
||||
インスタンスには通常、何らかの機密情報が含まれています。内部に入る方法はいくつかあります([EC2特権昇格トリック](../../aws-privilege-escalation/aws-ec2-privesc.md)を確認してください)。ただし、含まれている内容を確認する別の方法は、**AMIを作成し、それから新しいインスタンスを実行することです(自分のアカウントであっても)**:
|
||||
```shell
|
||||
# List instances
|
||||
aws ec2 describe-images
|
||||
@@ -49,7 +49,7 @@ aws ec2 terminate-instances --instance-id "i-0546910a0c18725a1" --region eu-west
|
||||
```
|
||||
### EBSスナップショットダンプ
|
||||
|
||||
**スナップショットはボリュームのバックアップ**であり、通常は**機密情報**を含むため、これを確認することでこの情報が明らかになるはずです。\
|
||||
**スナップショットはボリュームのバックアップ**であり、通常は**機密情報**を含むため、これを確認することでこの情報が明らかになる可能性があります。\
|
||||
**スナップショットのないボリューム**を見つけた場合は、**スナップショットを作成**して次のアクションを実行するか、単に**アカウント内のインスタンスにマウント**することができます:
|
||||
|
||||
{{#ref}}
|
||||
@@ -63,7 +63,7 @@ aws-ebs-snapshot-dump.md
|
||||
EC2をロックダウンしてトラフィックが外に出られないようにしても、**DNS経由で流出する**可能性があります。
|
||||
|
||||
- **VPCフローログはこれを記録しません**。
|
||||
- AWS DNSログへのアクセスはありません。
|
||||
- AWS DNSログにアクセスできません。
|
||||
- 次のコマンドで "enableDnsSupport" を false に設定することで無効にします:
|
||||
|
||||
`aws ec2 modify-vpc-attribute --no-enable-dns-support --vpc-id <vpc-id>`
|
||||
@@ -79,23 +79,23 @@ EC2をロックダウンしてトラフィックが外に出られないよう
|
||||
aws ec2 authorize-security-group-ingress --group-id <sg-id> --protocol tcp --port 80 --cidr 0.0.0.0/0
|
||||
# Or you could just open it to more specific ips or maybe th einternal network if you have already compromised an EC2 in the VPC
|
||||
```
|
||||
### ECSへの権限昇格
|
||||
### Privesc to ECS
|
||||
|
||||
EC2インスタンスを実行し、それをECSインスタンスを実行するために登録し、その後ECSインスタンスのデータを盗むことが可能です。
|
||||
EC2インスタンスを実行し、ECSインスタンスを実行するために登録し、その後ECSインスタンスのデータを盗むことが可能です。
|
||||
|
||||
For [**more information check this**](../../aws-privilege-escalation/aws-ec2-privesc.md#privesc-to-ecs).
|
||||
|
||||
### VPCフローログの削除
|
||||
### Remove VPC flow logs
|
||||
```bash
|
||||
aws ec2 delete-flow-logs --flow-log-ids <flow_log_ids> --region <region>
|
||||
```
|
||||
### SSMポートフォワーディング
|
||||
### SSM ポートフォワーディング
|
||||
|
||||
必要な権限:
|
||||
|
||||
- `ssm:StartSession`
|
||||
|
||||
コマンド実行に加えて、SSMはトラフィックトンネリングを許可しており、これを悪用してセキュリティグループやNACLのためにネットワークアクセスがないEC2インスタンスからピボットすることができます。この機能が役立つシナリオの一つは、[Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/)からプライベートEKSクラスターへのピボットです。
|
||||
コマンド実行に加えて、SSMはトラフィックトンネリングを許可しており、これを悪用してセキュリティグループやNACLのためにネットワークアクセスがないEC2インスタンスからピボットすることができます。この機能が役立つシナリオの一つは、[Bastion Host](https://www.geeksforgeeks.org/what-is-aws-bastion-host/) からプライベートEKSクラスターへのピボットです。
|
||||
|
||||
> セッションを開始するには、SessionManagerPluginをインストールする必要があります: https://docs.aws.amazon.com/systems-manager/latest/userguide/install-plugin-macos-overview.html
|
||||
|
||||
@@ -104,18 +104,18 @@ aws ec2 delete-flow-logs --flow-log-ids <flow_log_ids> --region <region>
|
||||
```shell
|
||||
aws ssm start-session --target "$INSTANCE_ID"
|
||||
```
|
||||
3. [Abusing SSRF in AWS EC2 environment](https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#abusing-ssrf-in-aws-ec2-environment) スクリプトを使用して、Bastion EC2 AWS 一時資格情報を取得します
|
||||
3. [AWS EC2 環境での SSRF の悪用](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#abusing-ssrf-in-aws-ec2-environment) スクリプトを使用して、Bastion EC2 AWS 一時資格情報を取得します
|
||||
4. 資格情報を `$HOME/.aws/credentials` ファイルに `[bastion-ec2]` プロファイルとして自分のマシンに転送します
|
||||
5. Bastion EC2 として EKS にログインします:
|
||||
```shell
|
||||
aws eks update-kubeconfig --profile bastion-ec2 --region <EKS-CLUSTER-REGION> --name <EKS-CLUSTER-NAME>
|
||||
```
|
||||
6. `$HOME/.kube/config` ファイルの `server` フィールドを `https://localhost` にポイントするように更新します
|
||||
7. 次のようにSSMトンネルを作成します:
|
||||
6. `$HOME/.kube/config` ファイルの `server` フィールドを `https://localhost` に更新します
|
||||
7. 次のように SSM トンネルを作成します:
|
||||
```shell
|
||||
sudo aws ssm start-session --target $INSTANCE_ID --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters '{"host":["<TARGET-IP-OR-DOMAIN>"],"portNumber":["443"], "localPortNumber":["443"]}' --region <BASTION-INSTANCE-REGION>
|
||||
```
|
||||
8. `kubectl` ツールからのトラフィックは、Bastion EC2 を介して SSM トンネルを通じて転送されており、次のコマンドを実行することで自分のマシンからプライベート EKS クラスターにアクセスできます:
|
||||
8. `kubectl`ツールからのトラフィックは、Bastion EC2を介してSSMトンネルを通じて転送されており、次のコマンドを実行することで自分のマシンからプライベートEKSクラスターにアクセスできます:
|
||||
```shell
|
||||
kubectl get pods --insecure-skip-tls-verify
|
||||
```
|
||||
@@ -139,7 +139,7 @@ aws ec2 modify-snapshot-attribute --snapshot-id <snapshot_ID> --create-volume-pe
|
||||
|
||||
S3のポストエクスプロイテーションノートで示されたランサムウェアデモに似た概念実証。KMSは、さまざまなAWSサービスを暗号化するために使用するのが非常に簡単であることから、Ransomware Management Service(RMS)に改名されるべきです。
|
||||
|
||||
まず、「攻撃者」のAWSアカウントから、KMSにカスタマーマネージドキーを作成します。この例では、AWSがキーのデータを管理しますが、現実的なシナリオでは悪意のあるアクターがAWSの管理外でキーのデータを保持します。キーのポリシーを変更して、任意のAWSアカウントのPrincipalがキーを使用できるようにします。このキーのポリシーでは、アカウント名は「AttackSim」で、すべてのアクセスを許可するポリシールールは「Outside Encryption」と呼ばれています。
|
||||
まず、'attacker' AWSアカウントからKMSにカスタマーマネージドキーを作成します。この例では、AWSがキーのデータを管理しますが、現実的なシナリオでは悪意のあるアクターがAWSの管理外でキーのデータを保持します。キーのポリシーを変更して、任意のAWSアカウントのPrincipalがキーを使用できるようにします。このキーのポリシーでは、アカウント名は'AttackSim'で、すべてのアクセスを許可するポリシールールは'Outside Encryption'と呼ばれています。
|
||||
```
|
||||
{
|
||||
"Version": "2012-10-17",
|
||||
@@ -239,17 +239,17 @@ S3のポストエクスプロイテーションノートで示されたランサ
|
||||
- `kms:GenerateDataKeyWithoutPlainText`
|
||||
- `kms:ReEncrypt`
|
||||
|
||||
次に、公開アクセス可能なキーを使用します。暗号化されていない EBS ボリュームがアタッチされた EC2 インスタンスを持つ「被害者」アカウントを使用できます。この「被害者」アカウントの EBS ボリュームが暗号化のターゲットです。この攻撃は、高特権の AWS アカウントが侵害されていると仮定しています。
|
||||
次に、公開アクセス可能なキーを使用します。暗号化されていない EBS ボリュームがアタッチされた EC2 インスタンスを持つ「被害者」アカウントを使用できます。この「被害者」アカウントの EBS ボリュームが暗号化のターゲットです。この攻撃は、高権限の AWS アカウントが侵害されていると仮定しています。
|
||||
|
||||
 
|
||||
|
||||
S3 ランサムウェアの例と同様に、この攻撃はアタッチされた EBS ボリュームのコピーをスナップショットを使用して作成し、「攻撃者」アカウントからの公開利用可能なキーを使用して新しい EBS ボリュームを暗号化し、元の EBS ボリュームを EC2 インスタンスからデタッチして削除し、最後に新しく暗号化された EBS ボリュームを作成するために使用されたスナップショットを削除します。 
|
||||
|
||||
これにより、アカウントに残るのは暗号化された EBS ボリュームのみになります。
|
||||
これにより、アカウントに残るのは暗号化された EBS ボリュームのみとなります。
|
||||
|
||||

|
||||
|
||||
また、スクリプトは元の EBS ボリュームをデタッチして削除するために EC2 インスタンスを停止しました。元の暗号化されていないボリュームはもうありません。
|
||||
また、スクリプトは元の EBS ボリュームをデタッチして削除するために EC2 インスタンスを停止しました。元の暗号化されていないボリュームは現在存在しません。
|
||||
|
||||

|
||||
|
||||
@@ -324,15 +324,15 @@ S3 ランサムウェアの例と同様に、この攻撃はアタッチされ
|
||||
]
|
||||
}
|
||||
```
|
||||
新しく設定されたキー ポリシーが伝播するのを少し待ちます。その後、「被害者」アカウントに戻り、新しく暗号化された EBS ボリュームのいずれかをアタッチしようとします。ボリュームをアタッチできることがわかります。
|
||||
しばらく待って、新しく設定されたキー ポリシーが伝播するのを待ちます。その後、「被害者」アカウントに戻り、新しく暗号化された EBS ボリュームのいずれかをアタッチしようとします。ボリュームをアタッチできることがわかります。
|
||||
|
||||
 
|
||||
|
||||
しかし、暗号化された EBS ボリュームで EC2 インスタンスを実際に再起動しようとすると、失敗し、「保留中」状態から「停止」状態に永遠に戻ります。これは、アタッチされた EBS ボリュームがキーを使用して復号化できないため、キー ポリシーがもはやそれを許可しないからです。
|
||||
しかし、暗号化された EBS ボリュームで EC2 インスタンスを実際に再起動しようとすると、単に失敗し、「保留中」状態から「停止」状態に永遠に戻ります。これは、アタッチされた EBS ボリュームがキー ポリシーがもはや許可していないため、キーを使用して復号化できないからです。
|
||||
|
||||
 
|
||||
|
||||
これが使用される Python スクリプトです。これは、「被害者」アカウントの AWS クレデンシャルと、暗号化に使用されるキーの公開利用可能な AWS ARN 値を取得します。このスクリプトは、ターゲット AWS アカウント内のすべての EC2 インスタンスにアタッチされているすべての利用可能な EBS ボリュームの暗号化されたコピーを作成し、その後、すべての EC2 インスタンスを停止し、元の EBS ボリュームをデタッチし、それらを削除し、最終的にプロセス中に使用されたすべてのスナップショットを削除します。これにより、ターゲットの「被害者」アカウントには暗号化された EBS ボリュームのみが残ります。このスクリプトはテスト環境でのみ使用してください。これは破壊的であり、すべての元の EBS ボリュームを削除します。使用された KMS キーを使用してそれらを復元し、スナップショットを介して元の状態に戻すことができますが、これは最終的にはランサムウェアの PoC であることを認識しておいてください。
|
||||
これが使用される Python スクリプトです。これは、「被害者」アカウントの AWS クレデンシャルと、暗号化に使用されるキーの公開利用可能な AWS ARN 値を取得します。このスクリプトは、ターゲット AWS アカウント内のすべての EC2 インスタンスにアタッチされているすべての利用可能な EBS ボリュームの暗号化されたコピーを作成し、その後、すべての EC2 インスタンスを停止し、元の EBS ボリュームをデタッチし、それらを削除し、最後にプロセス中に使用されたすべてのスナップショットを削除します。これにより、ターゲットの「被害者」アカウントには暗号化された EBS ボリュームのみが残ります。このスクリプトはテスト環境でのみ使用してください。これは破壊的であり、すべての元の EBS ボリュームを削除します。使用された KMS キーを使用してそれらを復元し、スナップショットを介して元の状態に戻すことができますが、これは最終的にはランサムウェアの PoC であることを認識しておいてください。
|
||||
```
|
||||
import boto3
|
||||
import argparse
|
||||
|
||||
@@ -46,15 +46,15 @@ aws ecr get-download-url-for-layer \
|
||||
--registry-id 653711331788 \
|
||||
--layer-digest "sha256:edfaad38ac10904ee76c81e343abf88f22e6cfc7413ab5a8e4aeffc6a7d9087a"
|
||||
```
|
||||
画像をダウンロードした後は、**機密情報を確認する**必要があります:
|
||||
画像をダウンロードした後は、**機密情報を確認する必要があります**:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.xyz/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics
|
||||
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.html
|
||||
{{#endref}}
|
||||
|
||||
### `ecr:PutLifecyclePolicy` | `ecr:DeleteRepository` | `ecr-public:DeleteRepository` | `ecr:BatchDeleteImage` | `ecr-public:BatchDeleteImage`
|
||||
|
||||
これらの権限を持つ攻撃者は、**リポジトリ内のすべての画像を削除するライフサイクルポリシーを作成または変更**し、その後**ECRリポジトリ全体を削除**することができます。これにより、リポジトリに保存されているすべてのコンテナ画像が失われます。
|
||||
これらの権限を持つ攻撃者は、**リポジトリ内のすべての画像を削除するライフサイクルポリシーを作成または変更し、**その後**ECRリポジトリ全体を削除することができます**。これにより、リポジトリに保存されているすべてのコンテナ画像が失われます。
|
||||
```bash
|
||||
bashCopy code# Create a JSON file with the malicious lifecycle policy
|
||||
echo '{
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
# AWS - ECS ポストエクスプロイテーション
|
||||
# AWS - ECS Post Exploitation
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## ECS
|
||||
|
||||
詳細については、以下を確認してください:
|
||||
詳細については、次を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
../aws-services/aws-ecs-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### ホスト IAM ロール
|
||||
### ホストIAMロール
|
||||
|
||||
ECS では、**IAM ロールがコンテナ内で実行されているタスクに割り当てられる**ことがあります。**もし**タスクが**EC2**インスタンス内で実行されている場合、**EC2 インスタンス**には**別の IAM**ロールが付与されます。\
|
||||
つまり、ECS インスタンスを**侵害**することができれば、**ECR および EC2 インスタンスに関連付けられた IAM ロールを取得する**可能性があります。これらの資格情報を取得する方法については、以下を確認してください:
|
||||
ECSでは、**IAMロールはコンテナ内で実行されているタスクに割り当てることができます**。**もし**タスクが**EC2**インスタンス内で実行されている場合、**EC2インスタンス**には**別のIAM**ロールが付与されます。\
|
||||
つまり、ECSインスタンスを**侵害**することに成功すれば、**ECRおよびEC2インスタンスに関連付けられたIAMロールを取得する可能性があります**。これらの資格情報を取得する方法についての詳細は、次を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf
|
||||
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html
|
||||
{{#endref}}
|
||||
|
||||
> [!CAUTION]
|
||||
> EC2 インスタンスが IMDSv2 を強制している場合、[**ドキュメントによると**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html)、**PUT リクエストの応答**には**ホップ制限が 1**があり、EC2 インスタンス内のコンテナから EC2 メタデータにアクセスすることは不可能になります。
|
||||
> EC2インスタンスがIMDSv2を強制している場合、[**ドキュメントによると**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html)、**PUTリクエストの応答**は**ホップ制限が1**となり、EC2インスタンス内のコンテナからEC2メタデータにアクセスすることが不可能になります。
|
||||
|
||||
### ノードへの特権昇格と他のコンテナの資格情報と秘密の盗難
|
||||
### ノードへの特権昇格と他のコンテナの資格情報・秘密の盗難
|
||||
|
||||
さらに、EC2 は ECs タスクを実行するために Docker を使用しているため、ノードにエスケープするか、**Docker ソケットにアクセス**できれば、**他のコンテナ**がどのように実行されているかを**確認**でき、さらには**それらの中に入って**、**付与された IAM ロールを盗む**ことができます。
|
||||
さらに、EC2はECタスクを実行するためにdockerを使用しているため、ノードにエスケープするか、**dockerソケットにアクセス**できれば、**他のコンテナ**がどのように実行されているかを**確認**でき、さらには**それらの中に入って**、**付与されたIAMロールを盗む**ことができます。
|
||||
|
||||
#### 現在のホストでコンテナを実行する
|
||||
|
||||
さらに、**EC2 インスタンスロール**は通常、クラスター内のノードとして使用されている EC2 インスタンスの**コンテナインスタンスの状態を更新する**のに十分な**権限**を持っています。攻撃者は、**インスタンスの状態を DRAINING に変更**することで、ECS は**すべてのタスクをそこから削除**し、**REPLICA**として実行されているタスクは**別のインスタンスで実行される**ことになり、潜在的に**攻撃者のインスタンス内で**実行されるため、**IAM ロールを盗む**ことや、コンテナ内の潜在的な機密情報を**盗む**ことができます。
|
||||
さらに、**EC2インスタンスロール**は通常、クラスター内のノードとして使用されているEC2インスタンスの**コンテナインスタンスの状態を更新する**のに十分な**権限**を持っています。攻撃者は**インスタンスの状態をDRAININGに変更**することができ、その後ECSは**すべてのタスクを削除**し、**REPLICA**として実行されているタスクは**別のインスタンスで実行される**ことになり、潜在的に**攻撃者のインスタンス内**で実行されるため、彼は**それらのIAMロール**やコンテナ内の潜在的な機密情報を**盗む**ことができます。
|
||||
```bash
|
||||
aws ecs update-container-instances-state \
|
||||
--cluster <cluster> --status DRAINING --container-instances <container-instance-id>
|
||||
|
||||
Reference in New Issue
Block a user