12 KiB
Azure Pentesting
{{#include ../../banners/hacktricks-training.md}}
Podstawowe informacje
Dowiedz się podstaw o Azure i Entra ID na następującej stronie:
{{#ref}} az-basic-information/ {{#endref}}
Metodologia Pentestera/Red Team w Azure
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.
Zewnętrzna enumeracja i początkowy dostęp
Pierwszym krokiem jest oczywiście enumeracja informacji o najemcy, którego atakujesz, i próba zdobycia punktu zaczepienia.
Na podstawie nazwy domeny można dowiedzieć się czy firma korzysta z Azure, uzyskać ID najemcy, uzyskać inne ważne domeny w tym samym najemcy (jeśli są) oraz uzyskać istotne informacje, takie jak czy SSO jest włączone, konfiguracje poczty, ważne adresy e-mail użytkowników...
Sprawdź następującą stronę, aby dowiedzieć się, jak przeprowadzić zewnętrzną enumerację:
{{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}}
Z tą informacją najczęstsze sposoby na próbę zdobycia punktu zaczepienia to:
- OSINT: Sprawdź wycieki na Githubie lub innej platformie open source, które mogą zawierać dane uwierzytelniające lub interesujące informacje.
- Ponowne użycie hasła, wycieki lub password spraying
- Kupno danych uwierzytelniających od pracownika
- Typowe phishingi (dane uwierzytelniające lub aplikacja Oauth)
- Phishing z użyciem kodu urządzenia
- Naruszenia ze strony osób trzecich
- Luki w aplikacjach hostowanych w Azure
- Server Side Request Forgery z dostępem do punktu końcowego metadanych
- Przejęcia subdomen jak w https://godiego.co/posts/STO-Azure/
- Inne błędy konfiguracyjne usług Azure
- Jeśli laptop dewelopera jest skompromitowany (WinPEAS i LinPEAS mogą znaleźć te informacje):
- Wewnątrz
<HOME>/.Azure azureProfile.jsonzawiera informacje o zalogowanych użytkownikach z przeszłościclouds.configzawiera informacje o subskrypcjachservice_principal_entries.jsonzawiera dane uwierzytelniające aplikacji (ID najemcy, klienci i sekret). Tylko w Linux i macOSmsal_token_cache.jsonzawiera tokeny dostępu i tokeny odświeżania. Tylko w Linux i macOSservice_principal_entries.bini msal_token_cache.bin są używane w Windows i są szyfrowane za pomocą DPAPImsal_http_cache.binto pamięć podręczna żądań HTTP- Załaduj to:
with open("msal_http_cache.bin", 'rb') as f: pickle.load(f) AzureRmContext.jsonzawiera informacje o poprzednich logowaniach przy użyciu Az PowerShell (ale nie zawiera danych uwierzytelniających)- Wewnątrz
C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*znajdują się różne pliki.binz 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
.tbreswewnątrzC:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\, które zawierają dane zakodowane w 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 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)
Znajdź inne błędy konfiguracyjne usług Azure, które mogą prowadzić do punktu zaczepienia na następującej stronie:
{{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}}
Note
Pamiętaj, że zazwyczaj najgłośniejszą częścią enumeracji jest logowanie, a nie sama enumeracja.
Narzędzia Azure i Entra ID
Następujące narzędzia będą bardzo przydatne do powolnej (aby uniknąć wykrycia) lub automatycznej (aby zaoszczędzić czas) enumeracji zarówno najemców Entra ID, jak i środowisk Azure:
{{#ref}} az-enumeration-tools.md {{#endref}}
Ominięcie polityk dostępu

W przypadkach, gdy masz 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 -- 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/firmy.
- Możesz również spróbować skomprimitować dane uwierzytelniające Service Principal, ponieważ zazwyczaj są 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.
Sprawdź:
{{#ref}} az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md {{#endref}}
Whoami
Caution
Dowiedz się jak zainstalować az cli, AzureAD i Az PowerShell w sekcji Az - Entra ID.
Jedną z pierwszych rzeczy, które musisz wiedzieć, jest kim jesteś (w jakim środowisku jesteś):
{{#tabs }} {{#tab name="az cli" }}
az account list
az account tenant list # Current tenant info
az account subscription list # Current subscription info
az ad signed-in-user show # Current signed-in user
az ad signed-in-user list-owned-objects # Get owned objects by current user
az account management-group list #Not allowed by default
{{#endtab }}
{{#tab name="Az" }}
# Get the information about the current context (Account, Tenant, Subscription etc.)
Get-AzContext
# List all available contexts
Get-AzContext -ListAvailable
# Enumerate subscriptions accessible by the current user
Get-AzSubscription
#Get Resource group
Get-AzResourceGroup
{{#endtab }}
{{#tab name="Mg" }}
#Get the current session
Get-MgContext
{{#endtab }}
{{#tab name="AzureAD" }}
#Get the current session state
Get-AzureADCurrentSessionInfo
#Get details of the current tenant
Get-AzureADTenantDetail
{{#endtab }} {{#endtabs }}
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).
Możesz znaleźć tutaj przewodnik:
{{#ref}} az-services/az-azuread.md {{#endref}}
Sprawdź Narzędzia do post-eksploatacji, aby znaleźć narzędzia do eskalacji uprawnień w Entra ID, takie jak AzureHound:
{{#ref}} az-enumeration-tools.md#automated-post-exploitation-tools {{#endref}}
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 do zasobów. W tym celu:
- Znajdź zasób, do którego masz dostęp:
Tip
To nie wymaga żadnych specjalnych uprawnień.
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 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"
- Znajdź uprawnienia, które masz do zasobów, które możesz zobaczyć:
Tip
To nie wymaga żadnych specjalnych uprawnień.
Rozmawiając z API https://management.azure.com/{resource_id}/providers/Microsoft.Authorization/permissions?api-version=2022-04-01, możesz uzyskać uprawnienia, które masz do określonego zasobu w resource_id.
Dlatego, sprawdzając każdy z zasobów, do których masz dostęp, możesz uzyskać uprawnienia, które masz do nich.
Warning
Możesz zautomatyzować tę enumerację, używając narzędzia Find_My_Az_Management_Permissions.
Enumeruj uprawnienia z **`Microsoft.Authorization/roleAssignments/read`**
Tip
Zauważ, że potrzebujesz uprawnienia
Microsoft.Authorization/roleAssignments/read, aby wykonać tę akcję.
- Przy wystarczających uprawnieniach, rola
Get-AzRoleAssignmentmoże być użyta do enumeracji wszystkich ról w subskrypcji lub uprawnienia do konkretnego zasobu, wskazując go jak w:
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:
az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value"
jak w:
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=2022-04-01" | jq ".value"
- Inną opcją jest uzyskanie ról przypisanych do Ciebie w azure. To również wymaga uprawnienia
Microsoft.Authorization/roleAssignments/read:
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):
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>'
- 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=2022-04-01" | jq ".properties"
W następnej sekcji znajdziesz informacje o najczęściej używanych usługach Azure i jak je enumerować:
{{#ref}} az-services/ {{#endref}}
Eskalacja uprawnień, post-exploitation i utrzymywanie persistent
Gdy już wiesz, jak jest zbudowane środowisko Azure i jakie usługi są używane, możesz zacząć szukać sposobów na eskalację uprawnień, lateralne poruszanie się, przeprowadzanie innych ataków post-exploitation i utrzymywanie persistent.
W następnej sekcji znajdziesz 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:
{{#ref}} az-post-exploitation/ {{#endref}}
W następnej znajdziesz informacje o tym, jak utrzymywać persistent w najczęściej używanych usługach Azure:
{{#ref}} az-persistence/ {{#endref}}
{{#include ../../banners/hacktricks-training.md}}