mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-04 00:37:04 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
@@ -4,74 +4,74 @@
|
||||
|
||||
## Lambda
|
||||
|
||||
詳細は次を参照:
|
||||
詳しくは以下を参照してください:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-services/aws-lambda-enum.md
|
||||
{{#endref}}
|
||||
|
||||
### Lambda Layer Persistence
|
||||
### Lambda Layer 永続化
|
||||
|
||||
Lambda が実行される際にステルスに任意コードを実行するために **レイヤーをintroduce/backdoor** することが可能です:
|
||||
Lambda が実行される際にステルスに **introduce/backdoor a layer to execute arbitrary code** することが可能です:
|
||||
|
||||
{{#ref}}
|
||||
aws-lambda-layers-persistence.md
|
||||
{{#endref}}
|
||||
|
||||
### Lambda Extension Persistence
|
||||
### Lambda Extension 永続化
|
||||
|
||||
Lambda Layers を悪用することで extensions を悪用し、lambda 内にpersistしたりリクエストを盗んだり改変することも可能です。
|
||||
Lambda Layers を悪用することで extensions を悪用し、Lambda に永続化すると同時にリクエストを盗んだり改変したりすることも可能です。
|
||||
|
||||
{{#ref}}
|
||||
aws-abusing-lambda-extensions.md
|
||||
{{#endref}}
|
||||
|
||||
### Via resource policies
|
||||
### リソースポリシー経由
|
||||
|
||||
外部アカウントに対して invoke や update code といった異なる lambda アクションへのアクセス権を付与することが可能です:
|
||||
外部アカウントに対して、Lambda のさまざまな操作(such as invoke or update code)へのアクセスを付与することが可能です:
|
||||
|
||||
<figure><img src="../../../../images/image (255).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Versions, Aliases & Weights
|
||||
### バージョン、エイリアス & 重み
|
||||
|
||||
Lambda は **異なるバージョン**(各バージョンで異なるコード)を持てます。\
|
||||
その後、**異なるバージョンを指す別の alias を作成**し、それぞれに異なる weights を設定できます。\
|
||||
この方法で攻撃者は **backdoored version 1** と **正規コードのみの version 2** を作成し、ステルスのためにリクエストの 1% のみで version 1 を実行する、ということが可能です。
|
||||
A Lambda can have **different versions** (with different code each version).\
|
||||
Then, you can create **different aliases with different versions** of the lambda and set different weights to each.\
|
||||
この方法により、攻撃者は **backdoored version 1** と合法コードのみの **version 2** を作成し、リクエストの 1% のみ **version 1** を実行してステルスを保つことができます。
|
||||
|
||||
<figure><img src="../../../../images/image (120).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Version Backdoor + API Gateway
|
||||
|
||||
1. Copy the original code of the Lambda
|
||||
2. **Create a new version backdooring** the original code (or just with malicious code). Publish and **deploy that version** to $LATEST
|
||||
1. Call the API gateway related to the lambda to execute the code
|
||||
3. **Create a new version with the original code**, Publish and deploy that **version** to $LATEST.
|
||||
1. This will hide the backdoored code in a previous version
|
||||
4. Go to the API Gateway and **create a new POST method** (or choose any other method) that will execute the backdoored version of the lambda: `arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1`
|
||||
1. Note the final :1 of the arn **indicating the version of the function** (version 1 will be the backdoored one in this scenario).
|
||||
5. Select the POST method created and in Actions select **`Deploy API`**
|
||||
6. Now, when you **call the function via POST your Backdoor** will be invoked
|
||||
1. Lambda の元のコードをコピーする
|
||||
2. **Create a new version backdooring** the original code (or just with malicious code). Publish and **deploy that version** to $LATEST
|
||||
1. API Gateway を呼び出してコードを実行する
|
||||
3. **Create a new version with the original code**, Publish and deploy that **version** to $LATEST.
|
||||
1. これにより backdoored code は以前のバージョンに隠されます
|
||||
4. API Gateway に移動し、backdoored version の Lambda を実行する **create a new POST method**(または他の任意のメソッドを選択)を作成します: `arn:aws:lambda:us-east-1:<acc_id>:function:<func_name>:1`
|
||||
1. ARN の末尾の :1 が **indicating the version of the function** 点に注意してください(このシナリオでは version 1 が backdoored です)。
|
||||
5. 作成した POST メソッドを選択し、Actions で **`Deploy API`** を選択します
|
||||
6. これで、POST 経由で関数を呼び出すと、あなたの Backdoor が呼び出されます
|
||||
|
||||
### Cron/Event actuator
|
||||
### Cron/Event トリガー
|
||||
|
||||
何かが起こったときや一定時間が経過したときに **lambda functions を実行できる** という性質は、lambda を永続化と検知回避のための便利かつ一般的な手段にします。\
|
||||
以下は AWS 内での存在をステルスにするために lambda を作成して行えるアイデアです。
|
||||
何かが発生したときや一定時間経過時に **Lambda 関数を実行できる** という事実は、Lambda を永続化と検出回避のための一般的で効果的な手段にします。\
|
||||
ここでは、Lambda を作成して AWS 内での存在をよりステルスにするためのアイデアをいくつか示します。
|
||||
|
||||
- 新しいユーザーが作成されるたびに lambda が新しい user key を生成して attacker に送る。
|
||||
- 新しい role が作成されるたびに lambda が compromised users に対して assume role 権限を与える。
|
||||
- 新しい cloudtrail logs が生成されるたびにそれらを削除/改ざんする。
|
||||
- 新しいユーザーが作成されるたびに Lambda が新しいユーザーキーを生成して攻撃者に送る。
|
||||
- 新しいロールが作成されるたびに Lambda が侵害済みユーザーに対して assume role 権限を付与する。
|
||||
- 新しい CloudTrail ログが生成されるたびに、それらを削除/改ざんする
|
||||
|
||||
### RCE abusing AWS_LAMBDA_EXEC_WRAPPER + Lambda Layers
|
||||
|
||||
環境変数 `AWS_LAMBDA_EXEC_WRAPPER` を悪用し、runtime/handler が始まる前に attacker 制御の wrapper script を実行させます。wrapper は Lambda Layer で `/opt/bin/htwrap` として配布し、`AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap` を設定してから関数を invoke します。wrapper は function runtime process 内で実行され、function execution role を継承し、最終的に real runtime を `exec` するため元の handler は通常通り実行されます。
|
||||
環境変数 `AWS_LAMBDA_EXEC_WRAPPER` を悪用して、runtime/handler が開始する前に攻撃者管理下の wrapper スクリプトを実行させます。wrapper を Lambda Layer 経由で `/opt/bin/htwrap` に配布し、`AWS_LAMBDA_EXEC_WRAPPER=/opt/bin/htwrap` を設定してから関数を invoke します。wrapper は関数の runtime プロセス内で実行され、関数実行ロールを継承し、最後に本来の runtime を `exec` するため、元の handler は通常通り実行されます。
|
||||
|
||||
{{#ref}}
|
||||
aws-lambda-exec-wrapper-persistence.md
|
||||
{{#endref}}
|
||||
|
||||
### AWS - Lambda Function URL Public Exposure
|
||||
### AWS - Lambda Function URL 公開露出
|
||||
|
||||
Lambda asynchronous destinations と Recursion 設定を組み合わせて、EventBridge や cron などの外部 scheduler なしで関数を継続的に再呼び出しさせることを悪用します。デフォルトでは Lambda は再帰ループを終了させますが、recursion config を Allow に設定すると再度有効になります。Destinations は async invoke に対してサービス側で配信されるため、単一の seed invoke がステルスでコード不要の heartbeat/backdoor チャネルを作成します。オプションで reserved concurrency を使ってノイズを抑えることができます。
|
||||
Lambda の asynchronous destinations と Recursion 設定を組み合わせて、外部のスケジューラ(EventBridge、cron など)なしで関数を継続的に自己再呼び出しさせることを悪用します。デフォルトでは Lambda は再帰ループを終了しますが、recursion config を Allow に設定すると再び有効になります。Destinations は async invokes に対してサービス側で配信されるため、単一のシード invoke がステルスなコード不要のハートビート/バックドアチャネルを作成します。noise を低く保つために reserved concurrency でスロットルすることも可能です。
|
||||
|
||||
{{#ref}}
|
||||
aws-lambda-async-self-loop-persistence.md
|
||||
@@ -79,13 +79,55 @@ aws-lambda-async-self-loop-persistence.md
|
||||
|
||||
### AWS - Lambda Alias-Scoped Resource Policy Backdoor
|
||||
|
||||
攻撃者のロジックを持つ隠し Lambda バージョンを作成し、`lambda add-permission` の `--qualifier` パラメータを使ってその特定の version (または alias) にスコープした resource-based policy を作成します。`arn:aws:lambda:REGION:ACCT:function:FN:VERSION` に対して攻撃者プリンシパルにのみ `lambda:InvokeFunction` を付与します。関数名やプライマリアリス経由の通常の呼び出しは影響を受けず、攻撃者は直接 backdoored version ARN を invoke できます。
|
||||
攻撃者ロジックを含む隠しの Lambda バージョンを作成し、`lambda add-permission` の `--qualifier` パラメータを使ってその特定のバージョン(またはエイリアス)に対してリソースベースポリシーをスコープします。攻撃者プリンシパルに対して `arn:aws:lambda:REGION:ACCT:function:FN:VERSION` に対する `lambda:InvokeFunction` のみを付与します。関数名や主要なエイリアス経由の通常の呼び出しは影響を受けず、攻撃者は backdoored version ARN を直接呼び出すことができます。
|
||||
|
||||
これは Function URL を公開するよりもステルスで、プライマリトラフィックの alias を変更しません。
|
||||
これは Function URL を公開するよりステルス性が高く、主要なトラフィック用エイリアスを変更しません。
|
||||
|
||||
{{#ref}}
|
||||
aws-lambda-alias-version-policy-backdoor.md
|
||||
{{#endref}}
|
||||
|
||||
### AWS Lambda ランタイムの固定化
|
||||
|
||||
lambda:InvokeFunction、logs:FilterLogEvents、lambda:PutRuntimeManagementConfig、lambda:GetRuntimeManagementConfig の権限を持つ攻撃者は、関数の runtime management configuration を変更できます。この攻撃は、Lambda 関数を脆弱なランタイムバージョンに固定したり、新しいランタイムと互換性がない可能性のある悪意ある layers との互換性を維持したりする場合に特に効果的です。
|
||||
|
||||
攻撃者はランタイムバージョンを固定するために runtime management configuration を変更します:
|
||||
```bash
|
||||
# Invoke the function to generate runtime logs
|
||||
aws lambda invoke \
|
||||
--function-name $TARGET_FN \
|
||||
--payload '{}' \
|
||||
--region us-east-1 /tmp/ping.json
|
||||
|
||||
sleep 5
|
||||
|
||||
# Freeze automatic runtime updates on function update
|
||||
aws lambda put-runtime-management-config \
|
||||
--function-name $TARGET_FN \
|
||||
--update-runtime-on FunctionUpdate \
|
||||
--region us-east-1
|
||||
```
|
||||
適用された構成を確認してください:
|
||||
```bash
|
||||
aws lambda get-runtime-management-config \
|
||||
--function-name $TARGET_FN \
|
||||
--region us-east-1
|
||||
```
|
||||
任意: 特定のランタイムバージョンに固定する
|
||||
```bash
|
||||
# Extract Runtime Version ARN from INIT_START logs
|
||||
RUNTIME_ARN=$(aws logs filter-log-events \
|
||||
--log-group-name /aws/lambda/$TARGET_FN \
|
||||
--filter-pattern "INIT_START" \
|
||||
--query 'events[0].message' \
|
||||
--output text | grep -o 'Runtime Version ARN: [^,]*' | cut -d' ' -f4)
|
||||
```
|
||||
特定のランタイムバージョンに固定する:
|
||||
```bash
|
||||
aws lambda put-runtime-management-config \
|
||||
--function-name $TARGET_FN \
|
||||
--update-runtime-on Manual \
|
||||
--runtime-version-arn $RUNTIME_ARN \
|
||||
--region us-east-1
|
||||
```
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user