Azure Pentesting

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

JE SUIS TOUJOURS EN TRAIN DE CONSTRUIRE LA MÉTHODOLOGIE AZURE

Informations de base

pageAz - Basic Information

Méthodologie de testeur/Auditeur Azure Red Team

Pour auditer un environnement AZURE, il est très important de savoir : quels services sont utilisés, ce qui est exposé, qui a accès à quoi, et comment les services Azure internes et services externes sont connectés.

Du point de vue de l'équipe rouge, le premier pas pour compromettre un environnement Azure est de parvenir à obtenir des informations d'identification pour Azure AD. Voici quelques idées sur la façon de le faire :

  • Fuites sur github (ou similaire) - OSINT

  • Ingénierie sociale

  • Réutilisation de mot de passe (fuites de mots de passe)

  • Vulnérabilités dans les applications hébergées sur Azure

  • Falsification de requête côté serveur avec accès à l'endpoint de métadonnées

  • Lecture de fichiers locaux

  • /home/USERNAME/.azure

  • C:\Users\USERNAME\.azure

  • Le fichier accessTokens.json dans az cli avant 2.30 - Jan2022 - stockait les jetons d'accès en clair

  • Le fichier azureProfile.json contient des informations sur l'utilisateur connecté.

  • az logout supprime le jeton.

  • Les anciennes versions de Az PowerShell stockaient les jetons d'accès en clair dans TokenCache.dat. Il stocke également le ServicePrincipalSecret en clair dans AzureRmContext.json. La commande Save-AzContext peut être utilisée pour stocker les jetons. Utilisez Disconnect-AzAccount pour les supprimer.

  • Des tiers ont été compromis

  • Employé interne

  • Phishing commun (informations d'identification ou application Oauth)

Même si vous n'avez pas compromis d'utilisateur à l'intérieur du locataire Azure que vous attaquez, vous pouvez recueillir des informations à partir de celui-ci :

pageAz - Unauthenticated Enum & Initial Entry

Après avoir réussi à obtenir des informations d'identification, vous devez savoir à qui appartiennent ces informations d'identification, et à quoi elles ont accès, vous devez donc effectuer une certaine énumération de base :

Énumération de base

Rappelez-vous que la partie la plus bruyante de l'énumération est la connexion, pas l'énumération elle-même.

SSRF

Si vous trouvez un SSRF sur une machine à l'intérieur d'Azure, consultez cette page pour des astuces :

Contournement des conditions de connexion

Dans les cas où vous avez des informations d'identification valides mais que vous ne pouvez pas vous connecter, voici quelques protections courantes qui pourraient être en place :

  • Liste blanche IP -- Vous devez compromettre une IP valide

  • Restrictions géographiques -- Trouvez où l'utilisateur vit ou où se trouvent les bureaux de l'entreprise et obtenez une IP de la même ville (ou du même pays au moins)

  • Navigateur -- Peut-être qu'un navigateur spécifique à certains OS (Windows, Linux, Mac, Android, iOS) est autorisé. Découvrez quels OS la victime/l'entreprise utilise.

  • Vous pouvez également essayer de compromettre les informations d'identification du Service Principal car elles sont généralement moins limitées et leur connexion est moins examinée

Après l'avoir contourné, vous pourriez être en mesure de revenir à votre configuration initiale et conserver l'accès.

Prise de contrôle de sous-domaine

Qui suis-je

Apprenez comment installer az cli, AzureAD et Az PowerShell dans la section Az - AzureAD.

Une des premières choses que vous devez savoir est qui vous êtes (dans quel environnement vous êtes) :

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

  1. Manual Enumeration: Use tools like ldapsearch, ADRecon, or BloodHound to gather information about users in the Azure AD.

  2. Automated Enumeration: Utilize tools like Azure AD Recon or Azure AD Connect to automate the enumeration process.

Group Enumeration

  1. Manual Enumeration: Use tools like ldapsearch, ADRecon, or BloodHjson to gather information about groups in the Azure AD.

  2. Automated Enumeration: Utilize tools like Azure AD Recon or Azure AD Connect to automate the enumeration process.

Device Enumeration

  1. Manual Enumeration: Use tools like ldapsearch,json ADRecon, or BloodHound to gather information about devices in the Azure AD.

  2. Automated Enumeration: Utilize tools like Azure AD Recon or Azure AD Connect to automate the enumeration process.

Application Enumeration

  1. Manual Enumeration: Use tools like ldapsearch, ADRecon, or BloodHound to gather information about applications registered in the Azure AD.

  2. Automated Enumeration: Utilize tools like Azure AD Recon or Azure AD Connect to automate the enumeration process.

Service Principal Enumeration

  1. Manual Enumeration: Use tools like ldapsearch, ADRejsoncon, or BloodHound to gather information about service principals in the Azure AD.

  2. Automated Enumeration: Utilize tools like Azure AD Recon or Azure AD Connect to automate the enumeration process.

Privileged Role Enumeration

  1. Manual Enumeration: Use tools like ldapsearch, ADRecon,json or BloodHound to gather information about privileged roles in the Azure AD.

  2. Automated Enumeration: Utilize tools like Azure AD Recon or Azure AD Connect to automate the enumeration process.

Domain Enumeration

  1. Manual Enumeration: Use tools like ldapsearch, ADRecon, or BloodHound to gather information about the domain in the Azure AD.

  2. Automated Enumeration: Utilize tools like Azure AD Recon or Azure AD Connect to automate the enumeration process.

Policy Enumeration

  1. Manual Enumeration: Use tools like ldapsearch, ADRecon, or BloodHound to gather information about policies in the Azure AD.

  2. Automated Enumeration: Utilize tools like Azure AD Recon or Azure AD Connect to automate the enumeration process.

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

Azure PowerShell

Azure PowerShell est un module PowerShell qui fournit des commandes pour gérer les ressources Azure directement à partir de la ligne de commande PowerShell. Il permet d'automatiser des tâches courantes et de créer des scripts pour gérer les ressources Azure.

Pour commencer à utiliser Azure PowerShell, vous devez installer le module Azure PowerShell sur votre machine locale. Vous pouvez le faire en exécutant la commande suivante dans PowerShell :

Install-Module -Name Az -AllowClobber -Scope CurrentUser

Une fois le module installé, vous pouvez vous connecter à votre compte Azure à l'aide de la commande Connect-AzAccount et commencer à utiliser les commandes Azure PowerShell pour gérer vos ressources Azure.

Pour plus d'informations sur l'utilisation d'Azure PowerShell, vous pouvez consulter la documentation officielle d'Azure PowerShell sur le site de Microsoft.

# 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

Un des commandes les plus importantes pour énumérer Azure est Get-AzResource de Az PowerShell car elle vous permet de savoir les ressources sur lesquelles votre utilisateur actuel a une visibilité.

Vous pouvez obtenir les mêmes informations dans la console web en allant sur https://portal.azure.com/#view/HubsExtension/BrowseAll ou en recherchant "Toutes les ressources"

Énumération AzureAD

Par défaut, tout utilisateur devrait avoir suffisamment de permissions pour énumérer des éléments tels que les utilisateurs, les groupes, les rôles, les principaux de service... (vérifiez les permissions AzureAD par défaut). Vous pouvez trouver ici un guide :

pageAz - AzureAD (AAD)

Maintenant que vous avez des informations sur vos identifiants (et si vous êtes une équipe rouge, espérons que vous n'avez pas été détecté). Il est temps de découvrir quels services sont utilisés dans l'environnement. Dans la section suivante, vous pouvez vérifier quelques façons d'énumérer certains services courants.

Principal de service et politique d'accès

Un service Azure peut avoir une Identité Système (du service lui-même) ou utiliser une Identité Gérée attribuée à l'utilisateur. Cette Identité peut avoir une Politique d'Accès pour, par exemple, un KeyVault pour lire des secrets. Ces Politiques d'Accès devraient être restreintes (principe du moindre privilège), mais pourraient avoir plus de permissions que nécessaire. Typiquement, un service d'application utiliserait KeyVault pour récupérer des secrets et des certificats.

Il est donc utile d'explorer ces identités.

Console SCM du service d'application

Console Kudu pour se connecter au 'conteneur' du service d'application.

Shell Web

Utilisez portal.azure.com et sélectionnez le shell, ou utilisez shell.azure.com, pour un bash ou powershell. Le 'disque' de ce shell est stocké sous forme de fichier image dans un compte de stockage.

Azure DevOps

Azure DevOps est séparé d'Azure. Il possède des dépôts, des pipelines (yaml ou release), des tableaux, un wiki, et plus encore. Les Groupes de Variables sont utilisés pour stocker des valeurs de variables et des secrets.

Outils de Reconnaissance Automatisée

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
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

D'autres façons de soutenir HackTricks :

Dernière mise à jour