Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes

This commit is contained in:
Translator
2025-02-07 00:05:17 +00:00
parent cc61ac5c59
commit ab8c204744
2 changed files with 68 additions and 43 deletions
+48 -31
View File
@@ -4,7 +4,7 @@
## Podstawowe informacje
Dowiedz się podstaw o Azure i Entra ID na następującej stronie:
Dowiedz się podstaw Azure i Entra ID na następującej stronie:
{{#ref}}
az-basic-information/
@@ -14,7 +14,7 @@ az-basic-information/
Aby audytować środowisko AZURE, bardzo ważne jest, aby wiedzieć: które **usługi są używane**, co jest **eksponowane**, kto ma **dostęp** do czego i jak są połączone wewnętrzne usługi Azure oraz **usługi zewnętrzne**.
Z perspektywy Red Team, **pierwszym krokiem do skompromitowania środowiska Azure** jest zdobycie jakiegoś **punktu zaczepienia**.
Z punktu widzenia Red Team, **pierwszym krokiem do skompromitowania środowiska Azure** jest zdobycie jakiegoś **punktu zaczepienia**.
### Zewnętrzna enumeracja i początkowy dostęp
@@ -40,7 +40,7 @@ Z tą informacją najczęstsze sposoby na próbę zdobycia punktu zaczepienia to
- **Przejęcia subdomen** jak w [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)
- **Inne błędy konfiguracyjne usług Azure**
- Jeśli laptop dewelopera jest skompromitowany ([WinPEAS i LinPEAS](https://github.com/peass-ng/PEASS-ng) mogą znaleźć te informacje):
- Wewnątrz **`<HOME>/.Azure`**
- W **`<HOME>/.Azure`**
- **`azureProfile.json`** zawiera informacje o zalogowanych użytkownikach z przeszłości
- **`clouds.config` zawiera** informacje o subskrypcjach
- **`service_principal_entries.json`** zawiera dane uwierzytelniające aplikacji (ID najemcy, klienci i sekret). Tylko w Linux i macOS
@@ -49,9 +49,9 @@ Z tą informacją najczęstsze sposoby na próbę zdobycia punktu zaczepienia to
- **`msal_http_cache.bin`** to pamięć podręczna żądań HTTP
- Załaduj to: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`** zawiera informacje o wcześniejszych logowaniach przy użyciu Az PowerShell (ale nie dane uwierzytelniające)
- Wewnątrz **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** znajdują się różne pliki `.bin` z **tokenami dostępu**, tokenami ID i informacjami o koncie szyfrowanymi za pomocą DPAPI użytkownika.
- W **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** znajdują się różne pliki `.bin` z **tokenami dostępu**, tokenami ID i informacjami o koncie szyfrowanymi za pomocą DPAPI użytkownika.
- Możliwe jest znalezienie więcej **tokenów dostępu** w plikach `.tbres` wewnątrz **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`**, które zawierają dane w formacie base64 szyfrowane za pomocą DPAPI z tokenami dostępu.
- W Linux i macOS można uzyskać **tokeny dostępu, tokeny odświeżania i tokeny ID** z Az PowerShell (jeśli używane) uruchamiając `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"`
- W Linux i macOS możesz uzyskać **tokeny dostępu, tokeny odświeżania i tokeny ID** z Az PowerShell (jeśli używane) uruchamiając `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"`
- W Windows to generuje tylko tokeny ID.
- Możliwe jest sprawdzenie, czy Az PowerShell był używany w Linux i macOS, sprawdzając, czy istnieje `$HOME/.local/share/.IdentityService/` (chociaż zawarte pliki są puste i bezużyteczne)
@@ -79,9 +79,9 @@ az-enumeration-tools.md
W przypadkach, gdy masz jakieś ważne dane uwierzytelniające, ale nie możesz się zalogować, oto niektóre powszechne zabezpieczenia, które mogą być wprowadzone:
- **Biała lista IP** -- Musisz skompromitować ważny adres IP
- **Ograniczenia geograficzne** -- Znajdź, gdzie mieszka użytkownik lub gdzie znajdują się biura firmy i uzyskaj adres IP z tego samego miasta (lub przynajmniej kraju)
- **Przeglądarka** -- Może tylko przeglądarka z określonego systemu operacyjnego (Windows, Linux, Mac, Android, iOS) jest dozwolona. Dowiedz się, z jakiego systemu operacyjnego korzysta ofiara/firmy.
- Możesz także spróbować **skomplikować dane uwierzytelniające Service Principal**, ponieważ zazwyczaj są mniej ograniczone, a ich logowanie jest mniej kontrolowane
- **Ograniczenia geograficzne** -- Dowiedz się, gdzie mieszka użytkownik lub gdzie znajdują się biura firmy i uzyskaj adres IP z tego samego miasta (lub przynajmniej kraju)
- **Przeglądarka** -- Może tylko przeglądarka z określonego systemu operacyjnego (Windows, Linux, Mac, Android, iOS) jest dozwolona. Dowiedz się, z jakiego systemu operacyjnego korzysta ofiara/firma.
- Możesz także spróbować **skomplikować dane uwierzytelniające Service Principal**, ponieważ zazwyczaj są one mniej ograniczone, a ich logowanie jest mniej kontrolowane
Po ominięciu tego, możesz być w stanie wrócić do swojej początkowej konfiguracji i nadal mieć dostęp.
@@ -141,7 +141,7 @@ Get-AzureADTenantDetail
{{#endtabs }}
### Entra ID Enumeracja i Privesc
### Entra ID Enumeration & Privesc
Domyślnie każdy użytkownik powinien mieć **wystarczające uprawnienia do enumeracji** rzeczy takich jak użytkownicy, grupy, role, zasady usług... (sprawdź [domyślne uprawnienia AzureAD](az-basic-information/index.html#default-user-permissions)).\
Możesz tutaj znaleźć przewodnik:
@@ -157,58 +157,75 @@ az-enumeration-tools.md#automated-post-exploitation-tools
{{#endref}}
### Azure Enumeracja
### Azure Enumeration
Gdy już wiesz, kim jesteś, możesz zacząć enumerować **usługi Azure, do których masz dostęp**.
Powinieneś zacząć od ustalenia **uprawnień, które posiadasz** nad zasobami. W tym celu:
Powinieneś zacząć od ustalenia **uprawnień, które posiadasz** do zasobów. W tym celu:
1. **Znajdź zasób, do którego masz dostęp**:
Polecenie Az PowerShell **`Get-AzResource`** pozwala ci **poznać zasoby, które są widoczne dla twojego aktualnego użytkownika**.
Ponadto, możesz uzyskać te same informacje w **konsoli internetowej**, przechodząc do [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) lub wyszukując "Wszystkie zasoby" lub wykonując: `az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"`
2. **Znajdź uprawnienia, które masz nad zasobami, do których masz dostęp, i znajdź przypisane ci role**:
Ponadto, możesz uzyskać te same informacje w **konsoli internetowej**, przechodząc do [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) lub wyszukując "Wszystkie zasoby" lub wykonując:
```bash
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
```
2. **Znajdź uprawnienia, które masz do zasobów, do których masz dostęp, oraz znajdź przypisane role**:
Zauważ, że potrzebujesz uprawnienia **`Microsoft.Authorization/roleAssignments/read`**, aby wykonać tę akcję.
Ponadto, przy wystarczających uprawnieniach, rola **`Get-AzRoleAssignment`** może być użyta do **enumeracji wszystkich ról** w subskrypcji lub uprawnień nad konkretnym zasobem, wskazując go jak w: **`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4`**.
Ponadto, przy wystarczających uprawnieniach, rola **`Get-AzRoleAssignment`** może być użyta do **wyliczenia wszystkich ról** w subskrypcji lub uprawnienia do konkretnego zasobu, wskazując go w ten sposób:
```bash
Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4
```
Możliwe jest również uzyskanie tych informacji, uruchamiając:
```bash
az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"
```
jak w:
```bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"
```
Inną opcją jest uzyskanie ról przypisanych do Ciebie w azure za pomocą:
```bash
az role assignment list --assignee "<email>" --all --output table
```
Lub uruchamiając następujące (jeśli wyniki są puste, może to być spowodowane brakiem uprawnień do ich uzyskania):
```bash
az rest --method GET --uri 'https://management.azure.com/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '<user-id>'
```
3. **Znajdź szczegółowe uprawnienia ról przypisanych do Ciebie**:
Możliwe jest również uzyskanie tych informacji, uruchamiając **`az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"`** jak w:
Następnie, aby uzyskać szczegółowe uprawnienia, możesz uruchomić **`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`**.
- **`az rest --method GET --uri "https://management.azure.com//subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"`**
3. **Znajdź szczegółowe uprawnienia ról przypisanych do ciebie**:
Aby uzyskać szczegółowe uprawnienia, możesz uruchomić **`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`**.
Lub bezpośrednio wywołać API z **`az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2020-08-01-preview" | jq ".properties"`**.
W następnej sekcji znajdziesz **informacje o najczęściej używanych usługach Azure i jak je enumerować**:
Lub wywołać API bezpośrednio z
```bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2020-08-01-preview" | jq ".properties"
```
W poniższej sekcji możesz znaleźć **informacje o najczęściej używanych usługach Azure i jak je enumerować**:
{{#ref}}
az-services/
{{#endref}}
### Eskalacja Uprawnień, Post-Exploitation i Utrzymywanie Persistencji
### Eskalacja uprawnień, post-exploitation i utrzymanie
Gdy już wiesz, jak jest zbudowane środowisko Azure i jakie usługi są używane, możesz zacząć szukać sposobów na **eskalację uprawnień, ruch boczny, przeprowadzanie innych ataków post-exploitation i utrzymywanie persistencji**.
Gdy już wiesz, jak jest zbudowane środowisko Azure i jakie usługi są używane, możesz zacząć szukać sposobów na **eskalację uprawnień, ruch boczny, przeprowadzanie innych ataków post-exploitation i utrzymanie**.
W następnej sekcji znajdziesz informacje o tym, jak eskalować uprawnienia w najczęściej używanych usługach Azure:
W poniższej sekcji możesz znaleźć informacje o tym, jak eskalować uprawnienia w najczęściej używanych usługach Azure:
{{#ref}}
az-privilege-escalation/
{{#endref}}
W następnej znajdziesz informacje o tym, jak przeprowadzać ataki post-exploitation w najczęściej używanych usługach Azure:
W następnej możesz znaleźć informacje o tym, jak przeprowadzać ataki post-exploitation w najczęściej używanych usługach Azure:
{{#ref}}
az-post-exploitation/
{{#endref}}
W następnej znajdziesz informacje o tym, jak utrzymywać persistencję w najczęściej używanych usługach Azure:
W następnej możesz znaleźć informacje o tym, jak utrzymać persistencję w najczęściej używanych usługach Azure:
{{#ref}}
az-persistence/
@@ -4,38 +4,46 @@
## Podstawowe informacje
Polityki dostępu warunkowego w Azure to zasady ustalone w Microsoft Azure, które wymuszają kontrole dostępu do usług i aplikacji Azure na podstawie określonych **warunków**. Polityki te pomagają organizacjom zabezpieczyć swoje zasoby, stosując odpowiednie kontrole dostępu w odpowiednich okolicznościach.\
Polityki dostępu warunkowego w Azure to zasady ustalone w Microsoft Azure, aby egzekwować kontrole dostępu do usług i aplikacji Azure na podstawie określonych **warunków**. Polityki te pomagają organizacjom zabezpieczyć swoje zasoby, stosując odpowiednie kontrole dostępu w odpowiednich okolicznościach.\
Polityki dostępu warunkowego zasadniczo **określają** **Kto** może uzyskać dostęp do **Czego** z **Gdzie** i **Jak**.
Oto kilka przykładów:
1. **Polityka ryzyka logowania**: Ta polityka może być ustawiona na wymaganie wieloskładnikowej autoryzacji (MFA), gdy wykryte zostanie ryzyko logowania. Na przykład, jeśli zachowanie logowania użytkownika jest nietypowe w porównaniu do jego regularnego wzorca, na przykład logowanie z innego kraju, system może poprosić o dodatkową autoryzację.
1. **Polityka ryzyka logowania**: Ta polityka może być ustawiona na wymaganie uwierzytelnienia wieloskładnikowego (MFA) w przypadku wykrycia ryzyka logowania. Na przykład, jeśli zachowanie logowania użytkownika jest nietypowe w porównaniu do jego regularnego wzorca, na przykład logowanie z innego kraju, system może poprosić o dodatkowe uwierzytelnienie.
2. **Polityka zgodności urządzeń**: Ta polityka może ograniczyć dostęp do usług Azure tylko do urządzeń, które są zgodne z normami bezpieczeństwa organizacji. Na przykład, dostęp może być dozwolony tylko z urządzeń, które mają aktualne oprogramowanie antywirusowe lub działają na określonej wersji systemu operacyjnego.
## Obejścia polityk dostępu warunkowego
## Enumeracja
```bash
# Get all the policies from Azure without needing any special permission with (idea from https://github.com/LuemmelSec/APEX/blob/main/APEX.ps1)
az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-version=1.61-internal' | jq '.value[] | select(.policyType == 18) | {displayName, policyDetail: (.policyDetail[] | fromjson)}'
# You need Policy.Read.ConditionalAccess or Policy.Read.All permission in Entra ID
az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"
```
## Bypassy polityki dostępu warunkowego
Możliwe jest, że polityka dostępu warunkowego **sprawdza pewne informacje, które można łatwo zmanipulować, co pozwala na obejście polityki**. A jeśli na przykład polityka konfigurowała MFA, atakujący będzie mógł ją obejść.
Podczas konfigurowania polityki dostępu warunkowego należy wskazać **użytkowników** objętych polityką oraz **docelowe zasoby** (takie jak wszystkie aplikacje w chmurze).
Podczas konfigurowania polityki dostępu warunkowego należy wskazać **użytkowników** objętych oraz **docelowe zasoby** (takie jak wszystkie aplikacje w chmurze).
Należy również skonfigurować **warunki**, które będą **wyzwalać** politykę:
- **Sieć**: IP, zakresy IP i lokalizacje geograficzne
- Można obejść, używając VPN lub Proxy, aby połączyć się z krajem lub udać się do logowania z dozwolonego adresu IP
- Można to obejść, używając VPN lub Proxy, aby połączyć się z krajem lub logując się z dozwolonego adresu IP
- **Ryzyka Microsoftu**: Ryzyko użytkownika, ryzyko logowania, ryzyko wewnętrzne
- **Platformy urządzeń**: Dowolne urządzenie lub wybierz Android, iOS, Windows Phone, Windows, macOS, Linux
- Jeśli nie wybrano „Dowolne urządzenie”, ale wszystkie inne opcje są zaznaczone, można to obejść, używając losowego user-agenta, który nie jest związany z tymi platformami
- Jeśli nie wybrano „Dowolnego urządzenia”, ale wszystkie inne opcje są zaznaczone, można to obejść, używając losowego user-agenta, który nie jest związany z tymi platformami
- **Aplikacje klienckie**: Opcje to „Przeglądarka”, „Aplikacje mobilne i klienci desktopowi”, „Klienci Exchange ActiveSync” i „Inne klienci”
- Aby obejść logowanie z nie wybraną opcją
- **Filtr dla urządzeń**: Możliwe jest wygenerowanie reguły związanej z używanym urządzeniem
- **Przepływy autoryzacji**: Opcje to „Przepływ kodu urządzenia” i „Transfer autoryzacji
- **Przepływy uwierzytelniania**: Opcje to „Przepływ kodu urządzenia” i „Transfer uwierzytelniania
- To nie wpłynie na atakującego, chyba że próbuje nadużyć któregokolwiek z tych protokołów w próbie phishingu, aby uzyskać dostęp do konta ofiary
Możliwe **wyniki** to: Zablokuj lub Przyznaj dostęp z potencjalnymi warunkami, takimi jak wymaganie MFA, zgodność urządzenia...
Możliwe **wyniki** to: Zablokuj lub Przyznaj dostęp z potencjalnymi warunkami, takimi jak wymóg MFA, zgodność urządzenia
### Platformy urządzeń - Warunek urządzenia
Możliwe jest ustawienie warunku na podstawie **platformy urządzenia** (Android, iOS, Windows, macOS...), jednak opiera się to na **user-agencie**, więc łatwo to obejść. Nawet **wymuszając wszystkie opcje MFA**, jeśli użyjesz **user-agenta, który nie jest rozpoznawany**, będziesz mógł obejść MFA lub blokadę:
Możliwe jest ustawienie warunku na podstawie **platformy urządzenia** (Android, iOS, Windows, macOS...), jednak opiera się to na **user-agencie**, więc łatwo to obejść. Nawet **wymuszając wszystkie opcje MFA**, jeśli użyjesz **user-agenta, który nie jest rozpoznawany,** będziesz mógł obejść MFA lub blokadę:
<figure><img src="../../../../images/image (352).png" alt=""><figcaption></figcaption></figure>
@@ -48,7 +56,7 @@ Lub użyć [rozszerzenia przeglądarki takiego jak to](https://chromewebstore.go
### Lokalizacje: Kraje, zakresy IP - Warunek urządzenia
Jeśli to jest ustawione w polityce warunkowej, atakujący może po prostu użyć **VPN** w **dozwolonym kraju** lub spróbować znaleźć sposób na dostęp z **dozwolonego adresu IP**, aby obejść te warunki.
Jeśli to jest ustawione w polityce warunkowej, atakujący mógłby po prostu użyć **VPN** w **dozwolonym kraju** lub spróbować znaleźć sposób na dostęp z **dozwolonego adresu IP**, aby obejść te warunki.
### Aplikacje w chmurze
@@ -56,7 +64,7 @@ Możliwe jest skonfigurowanie **polityk dostępu warunkowego, aby zablokować lu
<figure><img src="../../../../images/image (353).png" alt=""><figcaption></figcaption></figure>
Aby spróbować obejść tę ochronę, powinieneś sprawdzić, czy możesz **zalogować się tylko do dowolnej aplikacji**.\
Aby spróbować obejść tę ochronę, powinieneś sprawdzić, czy możesz **uzyskać dostęp do dowolnej aplikacji**.\
Narzędzie [**AzureAppsSweep**](https://github.com/carlospolop/AzureAppsSweep) ma **dziesiątki identyfikatorów aplikacji wbudowanych** i spróbuje się do nich zalogować, informując cię o tym i nawet dając token, jeśli się powiedzie.
Aby **przetestować konkretne identyfikatory aplikacji w konkretnych zasobach**, możesz również użyć narzędzia takiego jak:
@@ -106,7 +114,7 @@ Znajdź więcej informacji na temat tego rodzaju ataku na następującej stronie
Ten skrypt pobiera dane uwierzytelniające użytkownika i sprawdza, czy można zalogować się do niektórych aplikacji.
To jest przydatne, aby zobaczyć, czy **nie jest wymagane MFA do logowania się do niektórych aplikacji**, które możesz później wykorzystać do **eskalacji uprawnień**.
Jest to przydatne, aby zobaczyć, czy **nie jest wymagane MFA do logowania się do niektórych aplikacji**, które możesz później wykorzystać do **eskalacji uprawnień**.
### [roadrecon](https://github.com/dirkjanm/ROADtools)