Azure Pentesting

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

WCIĄŻ BUDUJĘ METODOLOGIĘ AZURE

Podstawowe informacje

pageAz - Basic Information

Metodologia testera penetracyjnego/Red Teamu Azure

Aby przeprowadzić audyt środowiska AZURE, bardzo ważne jest poznanie: jakie 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 punktu widzenia Red Teamu, pierwszym krokiem do skompromitowania środowiska Azure jest uzyskanie jakichś poświadczeń dla Azure AD. Oto kilka pomysłów, jak to zrobić:

  • Wycieki w githubie (lub podobne) - OSINT

  • Inżynieria społeczna

  • Ponowne użycie hasła (wycieki haseł)

  • Luki w aplikacjach hostowanych w Azure

  • Server Side Request Forgery z dostępem do punktu końcowego metadanych

  • Odczyt lokalnego pliku

  • /home/NAZWA_UŻYTKOWNIKA/.azure

  • C:\Users\NAZWA_UŻYTKOWNIKA\.azure

  • Plik accessTokens.json w az cli przed wersją 2.30 - styczeń 2022 - przechowywał tokeny dostępu w postaci tekstu jawnego

  • Plik azureProfile.json zawiera informacje o zalogowanym użytkowniku.

  • az logout usuwa token.

  • Starsze wersje Az PowerShell przechowywały tokeny dostępu w postaci tekstu jawnego w TokenCache.dat. Przechowuje również ServicePrincipalSecret w postaci tekstu jawnego w AzureRmContext.json. Polecenie Save-AzContext może być użyte do przechowywania tokenów. Użyj Disconnect-AzAccount, aby je usunąć.

  • Firmy naruszone

  • Wewnętrzny pracownik

  • Powszechne Phishing (poświadczenia lub aplikacja Oauth)

Nawet jeśli nie skompromitowałeś żadnego użytkownika w atakowanym najemcy Azure, możesz zdobyć pewne informacje z niego:

pageAz - Unauthenticated Enum & Initial Entry

Po uzyskaniu poświadczeń musisz wiedzieć, do kogo należą te poświadczenia, i do czego mają dostęp, dlatego musisz przeprowadzić podstawową enumerację:

Podstawowa enumeracja

Pamiętaj, że najbardziej hałaśliwą częścią enumeracji jest logowanie, a nie sama enumeracja.

SSRF

Jeśli znalazłeś SSRF w maszynie wewnątrz Azure, sprawdź tę stronę z trikami:

Ominięcie Warunków Logowania

W przypadkach, gdy masz pewne ważne poświadczenia, ale nie możesz się zalogować, mogą być stosowane pewne powszechne zabezpieczenia:

  • Biała lista IP -- Musisz skompromitować ważne IP

  • Ograniczenia geograficzne -- Znajdź, gdzie mieszka użytkownik lub gdzie są biura firmy i uzyskaj IP z tego samego miasta (lub przynajmniej kraju)

  • Przeglądarka -- Być może dozwolona jest tylko przeglądarka z określonego systemu operacyjnego (Windows, Linux, Mac, Android, iOS). Dowiedz się, który system operacyjny używa ofiara/firma.

  • Możesz również spróbować skompromitować poświadczenia Service Principal, ponieważ zazwyczaj są one mniej ograniczone, a ich logowanie jest rzadziej sprawdzane

Po ominięciu tego, możesz być w stanie wrócić do początkowego ustawienia i nadal mieć dostęp.

Przejęcie Subdomeny

Whoami

Dowiedz się, jak zainstalować az cli, AzureAD i Az PowerShell w sekcji Az - AzureAD.

Jedną z pierwszych rzeczy, które musisz wiedzieć, jest kim jesteś (w jakim środowisku się znajdujesz):

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

AzureAD Enumeration

User Enumeration

To enumerate users in AzureAD, you can use tools like Azure AD Connect or Azure AD Graph API. These tools can help you gather information about users, such as usernames, email addresses, and group memberships.

Group Enumeration

For enumerating groups in AzureAD, tools like Azure AD Graph API or Azure Portal can be used. By querying the API or using the Azure Portal, you can retrieve information about groups, including group names, descriptions, and members.

Device Enumeration

To enumerate devices in AzureAD, tools like Azure AD Graph API or Azure Portal can be utilized. These tools allow you to gather information about devices registered in AzureAD, such as device names, types, and associated users.

Application Enumeration

For enumerating applications in AzureAD, you can use tools like Azure AD Graph API or Azure Portal. By querying the API or accessing the Azure Portal, you can retrieve details about applications registered in AzureAD, including names, owners, and permissions.

Service Principal Enumeration

To enumerate service principals in AzureAD, tools like Azure AD Graph API or Azure Portal can be employed. By querying the API or using the Azure Portal, you can collect information about service principals, such as names, application IDs, and permissions.

Role Enumeration

For enumerating roles in AzureAD, tools like Azure AD Graph API or Azure Portal can be helpful. These tools enable you to retrieve information about roles defined in AzureAD, including role names, descriptions, and assigned members.

Policy Enumeration

To enumerate policies in AzureAD, tools like Azure AD Graph API or Azure Portal can be used. By querying the API or accessing the Azure Portal, you can gather information about policies configured in AzureAD, such as policy names, settings, and assigned users or groups.

Privileged Identity Management (PIM) Enumeration

For enumerating privileged roles and users using PIM in AzureAD, you can utilize tools like Azure Portal or PowerShell. These tools allow you to view and manage privileged roles and users, including information about role assignments, activation, and approval workflows.

#Get the current session state
Get-AzureADCurrentSessionInfo
#Get details of the current tenant
Get-AzureADTenantDetail

Azure PowerShell

Azure PowerShell to zestaw poleceń do zarządzania zasobami w chmurze za pomocą poleceń PowerShell. Umożliwia automatyzację zadań i skryptowanie operacji w środowisku Azure.

Instalacja Azure PowerShell

Aby zainstalować Azure PowerShell, wykonaj następujące polecenia:

Install-Module -Name Az -AllowClobber -Scope CurrentUser
Connect-AzAccount

Konfiguracja połączenia

Po zainstalowaniu Azure PowerShell, użyj polecenia Connect-AzAccount do uwierzytelnienia się i połączenia z Twoim kontem Azure.

Podstawowe polecenia

  • Get-AzResource: Pobiera zasoby z subskrypcji.

  • New-AzResourceGroup: Tworzy nową grupę zasobów.

  • Set-AzVM: Konfiguruje maszynę wirtualną.

Więcej informacji na temat poleceń Azure PowerShell można znaleźć w dokumentacji Microsoftu.

# 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
# Enumerate all resources visible to the current user
Get-AzResource
# Enumerate all Azure RBAC role assignments
Get-AzRoleAssignment # For all users
Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user

Jedną z najważniejszych komend do wyliczenia zasobów w Azure jest Get-AzResource z Az PowerShell, ponieważ pozwala ona sprawdzić zasoby, które są widoczne dla bieżącego użytkownika.

Możesz uzyskać te same informacje w konsoli internetowej, przechodząc pod https://portal.azure.com/#view/HubsExtension/BrowseAll lub szukając "All resources".

Wyliczanie AzureAD

Domyślnie każdy użytkownik powinien mieć wystarczające uprawnienia do wyliczenia takich rzeczy jak użytkownicy, grupy, role, podmioty usług... (sprawdź domyślne uprawnienia AzureAD). Tutaj znajdziesz przewodnik:

pageAz - AzureAD (AAD)

Teraz, gdy masz pewne informacje o swoich poświadczeniach (i jeśli jesteś czerwoną drużyną, miejmy nadzieję, że nie zostałeś wykryty). Nadszedł czas, aby dowiedzieć się, które usługi są używane w środowisku. W następnej sekcji możesz sprawdzić kilka sposobów wyliczenia niektórych powszechnych usług.

Identyfikator usługi i polityka dostępu

Usługa Azure może mieć Identyfikator Systemowy (samej usługi) lub korzystać z Przypisanego Identyfikatora Zarządzanego Użytkownika. Ten Identyfikator może mieć Politykę Dostępu do, na przykład, KeyVault do odczytu tajemnic. Te Polityki Dostępu powinny być ograniczone (z zasady najmniejszych uprawnień), ale mogą mieć więcej uprawnień niż wymagane. Typowo usługa aplikacji używa KeyVault do pobierania tajemnic i certyfikatów.

Dlatego warto zbadać te tożsamości.

Konsola SCM usługi aplikacji

Konsola Kudu do zalogowania się do 'kontenera' usługi aplikacji.

Powłoka internetowa

Użyj portal.azure.com i wybierz powłokę, lub użyj shell.azure.com, aby uzyskać dostęp do basha lub powershella. 'Dysk' tej powłoki jest przechowywany jako plik obrazu w koncie przechowywania.

Azure DevOps

Azure DevOps jest oddzielony od Azure. Posiada repozytoria, potoki (yaml lub wydanie), tablice, wiki i wiele innych. Grupy zmiennych są używane do przechowywania wartości zmiennych i tajemnic.

Automatyczne narzędzia rozpoznawcze

cd ROADTools
pipenv shell
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
roadrecon gather
roadrecon gui

Import-Module monkey365
Get-Help Invoke-Monkey365
Get-Help Invoke-Monkey365 -Detailed
Invoke-Monkey365 -IncludeAzureActiveDirectory -ExportTo HTML -Verbose -Debug -InformationAction Continue
Invoke-Monkey365 - Instance Azure -Analysis All -ExportTo HTML

# Start Backend
cd stormspotter\backend\
pipenv shell
python ssbackend.pyz

# Start Front-end
cd stormspotter\frontend\dist\spa\
quasar.cmd serve -p 9091 --history

# Run Stormcollector
cd stormspotter\stormcollector\
pipenv shell
az login -u test@corp.onmicrosoft.com -p Welcome2022!
python stormspotter\stormcollector\sscollector.pyz cli
# This will generate a .zip file to upload in the frontend (127.0.0.1:9091)

# You need to use the Az PowerShell and Azure AD modules:
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ("test@corp.onmicrosoft.com", $passwd)
Connect-AzAccount -Credential $creds

Import-Module AzureAD\AzureAD.psd1
Connect-AzureAD -Credential $creds

# Launch AzureHound
. AzureHound\AzureHound.ps1
Invoke-AzureHound -Verbose

# Simple queries
## All Azure Users
MATCH (n:AZUser) return n.name
## All Azure Applications
MATCH (n:AZApp) return n.objectid
## All Azure Devices
MATCH (n:AZDevice) return n.name
## All Azure Groups
MATCH (n:AZGroup) return n.name
## All Azure Key Vaults
MATCH (n:AZKeyVault) return n.name
## All Azure Resource Groups
MATCH (n:AZResourceGroup) return n.name
## All Azure Service Principals
MATCH (n:AZServicePrincipal) return n.objectid
## All Azure Virtual Machines
MATCH (n:AZVM) return n.name
## All Principals with the ‘Contributor’ role
MATCH p = (n)-[r:AZContributor]->(g) RETURN p

# Advanced queries
## Get Global Admins
MATCH p =(n)-[r:AZGlobalAdmin*1..]->(m) RETURN p
## Owners of Azure Groups
MATCH p = (n)-[r:AZOwns]->(g:AZGroup) RETURN p
## All Azure Users and their Groups
MATCH p=(m:AZUser)-[r:MemberOf]->(n) WHERE NOT m.objectid CONTAINS 'S-1-5' RETURN p
## Privileged Service Principals
MATCH p = (g:AZServicePrincipal)-[r]->(n) RETURN p
## Owners of Azure Applications
MATCH p = (n)-[r:AZOwns]->(g:AZApp) RETURN p
## Paths to VMs
MATCH p = (n)-[r]->(g: AZVM) RETURN p
## Paths to KeyVault
MATCH p = (n)-[r]->(g:AZKeyVault) RETURN p
## Paths to Azure Resource Group
MATCH p = (n)-[r]->(g:AZResourceGroup) RETURN p
## On-Prem users with edges to Azure
MATCH  p=(m:User)-[r:AZResetPassword|AZOwns|AZUserAccessAdministrator|AZContributor|AZAddMembers|AZGlobalAdmin|AZVMContributor|AZOwnsAZAvereContributor]->(n) WHERE m.objectid CONTAINS 'S-1-5-21' RETURN p
## All Azure AD Groups that are synchronized with On-Premise AD
MATCH (n:Group) WHERE n.objectid CONTAINS 'S-1-5' AND n.azsyncid IS NOT NULL RETURN n

# You should use an account with at least read-permission on the assets you want to access
git clone https://github.com/nccgroup/azucar.git
PS> Get-ChildItem -Recurse c:\Azucar_V10 | Unblock-File

PS> .\Azucar.ps1 -AuthMode UseCachedCredentials -Verbose -WriteLog -Debug -ExportTo PRINT
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -CertFilePassword MySuperP@ssw0rd! -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000

# resolve the TenantID for an specific username
PS> .\Azucar.ps1 -ResolveTenantUserName user@company.com

Import-Module .\MicroBurst.psm1
Import-Module .\Get-AzureDomainInfo.ps1
Get-AzureDomainInfo -folder MicroBurst -Verbose

Connect-AzAccount
ipmo C:\Path\To\Powerzure.psd1
Get-AzureTarget

# Reader
$ Get-Runbook, Get-AllUsers, Get-Apps, Get-Resources, Get-WebApps, Get-WebAppDetails

# Contributor
$ Execute-Command -OS Windows -VM Win10Test -ResourceGroup Test-RG -Command "whoami"
$ Execute-MSBuild -VM Win10Test  -ResourceGroup Test-RG -File "build.xml"
$ Get-AllSecrets # AllAppSecrets, AllKeyVaultContents
$ Get-AvailableVMDisks, Get-VMDisk # Download a virtual machine's disk

# Owner
$ Set-Role -Role Contributor -User test@contoso.com -Resource Win10VMTest

# Administrator
$ Create-Backdoor, Execute-Backdoor
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated