From 239dbb27941721b51392dda7826c485c590a9a7e Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 26 May 2026 19:12:09 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/azure-security/az-enumeration-tool --- .../azure-security/az-enumeration-tools.md | 239 +++++++++++------- 1 file changed, 142 insertions(+), 97 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-enumeration-tools.md b/src/pentesting-cloud/azure-security/az-enumeration-tools.md index 07558c816..66d5f7b8e 100644 --- a/src/pentesting-cloud/azure-security/az-enumeration-tools.md +++ b/src/pentesting-cloud/azure-security/az-enumeration-tools.md @@ -1,11 +1,11 @@ -# Az - Strumenti di enumerazione +# Az - Strumenti di Enumeration {{#include ../../banners/hacktricks-training.md}} -## Installare PowerShell su Linux +## Install PowerShell in Linux > [!TIP] -> Su Linux dovrai installare PowerShell Core: +> In linux you will need to install PowerShell Core: ```bash sudo apt-get update sudo apt-get install -y wget apt-transport-https software-properties-common @@ -24,15 +24,15 @@ pwsh # Az cli curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash ``` -## Installare PowerShell su MacOS +## Installa PowerShell in MacOS -Istruzioni tratte dalla [**documentation**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4): +Istruzioni dalla [**documentazione**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4): 1. Installa `brew` se non è ancora installato: ```bash /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` -2. Installa l'ultima versione stabile di PowerShell: +2. Installa la versione stabile più recente di PowerShell: ```sh brew install powershell/tap/powershell ``` @@ -45,15 +45,15 @@ pwsh brew update brew upgrade powershell ``` -## Principali strumenti di enumerazione +## Main Enumeration Tools ### az cli -[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) è uno strumento multipiattaforma scritto in Python per gestire e amministrare (la maggior parte delle) risorse Azure e Entra ID. Si connette ad Azure ed esegue comandi amministrativi tramite la riga di comando o script. +[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) è uno strumento cross-platform scritto in Python per gestire e amministrare (la maggior parte delle) risorse Azure e Entra ID. Si connette ad Azure ed esegue comandi amministrativi tramite la command line o script. -Segui questo link per le [**installation instructions¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install). +Segui questo link per le [**istruzioni di installazione¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install). -I comandi in Azure CLI sono strutturati secondo il formato: `az ` +I comandi in Azure CLI sono strutturati usando un pattern di: `az ` #### Debug | MitM az cli @@ -61,7 +61,7 @@ Usando il parametro **`--debug`** è possibile vedere tutte le richieste che lo ```bash az account management-group list --output table --debug ``` -Per effettuare un **MitM** sul tool e **controllare manualmente tutte le richieste** che invia puoi fare: +Per fare un **MitM** al tool e **controllare manualmente tutte le richieste** che sta inviando, puoi fare: {{#tabs }} {{#tab name="Bash" }} @@ -109,15 +109,15 @@ $env:HTTP_PROXY="http://127.0.0.1:8080" ### Perché si verifica l'errore -When Azure CLI authenticates, it makes HTTPS requests (via MSAL → Requests → OpenSSL). If you’re intercepting TLS with Burp, Burp generates “on the fly” certificates for sites like `login.microsoftonline.com` and signs them with Burp’s CA. +Quando Azure CLI si autentica, esegue richieste HTTPS (tramite MSAL → Requests → OpenSSL). Se stai intercettando TLS con Burp, Burp genera certificati “al volo” per siti come `login.microsoftonline.com` e li firma con la CA di Burp. -On newer stacks (Python 3.13 + OpenSSL 3), CA validation is stricter: +Sulle stack più recenti (Python 3.13 + OpenSSL 3), la validazione della CA è più rigorosa: -- Un certificato CA deve includere **Basic Constraints: `CA:TRUE`** e una estensione **Key Usage** che permetta la firma dei certificati (**`keyCertSign`**, e tipicamente **`cRLSign`**). +- Un certificato CA deve includere **Basic Constraints: `CA:TRUE`** e un'estensione **Key Usage** che consenta la firma dei certificati (**`keyCertSign`**, e in genere **`cRLSign`**). -Burp’s default CA (PortSwigger CA) is old and typically lacks the Key Usage extension, so OpenSSL rejects it even if you “trust it”. +La CA predefinita di Burp (PortSwigger CA) è vecchia e di solito non include l'estensione Key Usage, quindi OpenSSL la rifiuta anche se la “consideri attendibile”. -That produces errors like: +Questo genera errori come: - `CA cert does not include key usage extension` - `CERTIFICATE_VERIFY_FAILED` @@ -125,22 +125,22 @@ That produces errors like: Quindi devi: -1. Create a modern CA (with proper Key Usage). -2. Make Burp use it to sign intercepted certs. -3. Trust that CA in macOS. -4. Point Azure CLI / Requests to that CA bundle. +1. Creare una CA moderna (con il corretto Key Usage). +2. Far usare a Burp quella CA per firmare i certificati intercettati. +3. Considerare attendibile quella CA in macOS. +4. Puntare Azure CLI / Requests a quel bundle CA. -### Passo-passo: configurazione funzionante +### Configurazione funzionante, passo per passo #### 0) Prerequisiti -- Burp in esecuzione localmente (proxy su `127.0.0.1:8080`) +- Burp in esecuzione in locale (proxy su `127.0.0.1:8080`) - Azure CLI installato (Homebrew) -- Disponi di `sudo` (per aggiungere la CA al keychain di sistema) +- Puoi usare `sudo` (per considerare attendibile la CA nel keychain di sistema) -#### 1) Create a standards-compliant Burp CA (PEM + KEY) +#### 1) Crea una Burp CA conforme agli standard (PEM + KEY) -Crea un file di configurazione OpenSSL che imposti esplicitamente le estensioni della CA: +Crea un file di configurazione OpenSSL che imposti esplicitamente le estensioni CA: ```bash mkdir -p ~/burp-ca && cd ~/burp-ca @@ -164,7 +164,7 @@ subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer EOF ``` -Genera il certificato CA + la chiave privata: +Genera il certificato CA + la private key: ```bash openssl req -x509 -new -nodes \ -days 3650 \ @@ -172,18 +172,18 @@ openssl req -x509 -new -nodes \ -out burp-ca.pem \ -config burp-ca.cnf ``` -Controllo rapido (DEVI vedere Key Usage): +Sanity check (devi vedere Usage delle chiavi): ```bash openssl x509 -in burp-ca.pem -noout -text | egrep -A3 "Basic Constraints|Key Usage" ``` -Dovrebbe includere qualcosa del tipo: +Atteso includere qualcosa come: - `CA:TRUE` - `Key Usage: ... Certificate Sign, CRL Sign` -#### 2) Convertire in PKCS#12 (formato di importazione per Burp) +#### 2) Convert to PKCS#12 (Burp import format) -Burp ha bisogno del certificato + della chiave privata; il modo più semplice è PKCS#12: +Burp necessita certificato + private key, il modo più semplice è PKCS#12: ```bash openssl pkcs12 -export \ -out burp-ca.p12 \ @@ -191,41 +191,41 @@ openssl pkcs12 -export \ -in burp-ca.pem \ -name "Burp Custom Root CA" ``` -Ti verrà chiesto di impostare una password per l'export (impostane una; Burp la richiederà). +Ti verrà chiesta una export password (impostane una; Burp te la chiederà). -#### 3) Importa la CA in Burp e riavvia Burp +#### 3) Import the CA into Burp e riavvia Burp In Burp: - Proxy → Options -- Find Import / export CA certificate -- Click Import CA certificate -- Choose PKCS#12 -- Select `burp-ca.p12` -- Enter the password -- Restart Burp completely (important) +- Trova Import / export CA certificate +- Clicca Import CA certificate +- Scegli PKCS#12 +- Seleziona `burp-ca.p12` +- Inserisci la password +- Riavvia Burp completamente (importante) -Perché riavviare? Burp potrebbe continuare a usare la vecchia CA fino al riavvio. +Perché riavviare? Burp può continuare a usare la vecchia CA fino al riavvio. -#### 4) Imposta la nuova CA come attendibile nel keychain di sistema di macOS +#### 4) Trust the new CA nel macOS system keychain -Questo permette alle app di sistema e a molti stack TLS di considerare attendibile la CA. +Questo permette alle system apps e a molti TLS stacks di trustare la CA. ```bash sudo security add-trusted-cert \ -d -r trustRoot \ -k /Library/Keychains/System.keychain \ ~/burp-ca/burp-ca.pem ``` -(Se preferisci la GUI: Keychain Access → System → Certificates → import → set “Always Trust”.) +(Se preferisci la GUI: Keychain Access → System → Certificates → import → imposta “Always Trust”.) -#### 5) Configura le variabili d'ambiente per il proxy +#### 5) Configura le variabili d'ambiente del proxy ```bash export HTTPS_PROXY="http://127.0.0.1:8080" export HTTP_PROXY="http://127.0.0.1:8080" ``` -#### 6) Configurare Requests/Azure CLI affinché si fidino della tua Burp CA +#### 6) Configurare Requests/Azure CLI per fidarsi della tua Burp CA -Azure CLI usa Python Requests internamente; configura entrambe le seguenti opzioni: +Azure CLI usa internamente Python Requests; imposta entrambi questi: ```bash export REQUESTS_CA_BUNDLE="$HOME/burp-ca/burp-ca.pem" export SSL_CERT_FILE="$HOME/burp-ca/burp-ca.pem" @@ -233,24 +233,24 @@ export SSL_CERT_FILE="$HOME/burp-ca/burp-ca.pem" Note: - `REQUESTS_CA_BUNDLE` è usato da Requests. -- `SSL_CERT_FILE` aiuta per altri client TLS e casi limite. -- Di solito non è necessario il vecchio `ADAL_PYTHON_SSL_NO_VERIFY` / `AZURE_CLI_DISABLE_CONNECTION_VERIFICATION` una volta che la CA è corretta. +- `SSL_CERT_FILE` aiuta per altri consumer TLS ed edge case. +- Di solito non serve il vecchio `ADAL_PYTHON_SSL_NO_VERIFY` / `AZURE_CLI_DISABLE_CONNECTION_VERIFICATION` una volta che la CA è corretta. -#### 7) Verifica che Burp stia effettivamente firmando con la tua nuova CA (controllo critico) +#### 7) Verifica che Burp stia davvero firmando con la tua nuova CA (controllo critico) -Questo conferma che la tua catena di intercettazione è corretta: +Questo conferma che la tua chain di interception è corretta: ```bash openssl s_client -connect login.microsoftonline.com:443 \ -proxy 127.0.0.1:8080 /dev/null \ | openssl x509 -noout -issuer ``` -L'issuer previsto contiene il nome della tua CA, ad esempio: +Expected issuer contains your CA name, e.g.: `O=Burp Custom CA, CN=Burp Custom Root CA` -Se vedi ancora PortSwigger CA, Burp non sta usando la CA che hai importato → ricontrolla l'importazione e riavvia. +Se vedi ancora PortSwigger CA, Burp non sta usando la tua CA importata → ricontrolla l’importazione e riavvia. -#### 8) Verificare che Python Requests funzioni tramite Burp +#### 8) Verifica che Python Requests funzioni attraverso Burp ```bash python3 - <<'EOF' import requests @@ -260,7 +260,7 @@ EOF ``` Atteso: `OK` -#### 9) Test di Azure CLI +#### 9) test Azure CLI ```bash az account get-access-token --resource=https://management.azure.com/ ``` @@ -274,7 +274,7 @@ Azure PowerShell è un modulo con cmdlet per gestire le risorse Azure direttamen Segui questo link per le [**installation instructions**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell). -I comandi in Azure PowerShell AZ Module sono strutturati come: `-Az ` +I comandi nel modulo Azure PowerShell AZ sono strutturati come: `-Az ` #### Debug | MitM Az PowerShell @@ -282,11 +282,11 @@ Usando il parametro **`-Debug`** è possibile vedere tutte le richieste che lo s ```bash Get-AzResourceGroup -Debug ``` -Per effettuare un **MitM** sullo strumento e **verificare manualmente tutte le richieste** che invia, puoi impostare le variabili d'ambiente `HTTPS_PROXY` e `HTTP_PROXY` secondo la [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy). +Per fare un **MitM** verso lo strumento e **controllare manualmente tutte le request** che invia, puoi impostare le variabili d'ambiente `HTTPS_PROXY` e `HTTP_PROXY` in base alla [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy). ### Microsoft Graph PowerShell -Microsoft Graph PowerShell è un SDK cross-platform che consente l'accesso a tutte le Microsoft Graph APIs, inclusi servizi come SharePoint, Exchange e Outlook, utilizzando un unico endpoint. Supporta PowerShell 7+, l'autenticazione moderna tramite MSAL, identità esterne e query avanzate. Con un focus sul principio del minimo privilegio, garantisce operazioni sicure e riceve aggiornamenti regolari per allinearsi alle più recenti funzionalità delle Microsoft Graph API. +Microsoft Graph PowerShell è un SDK cross-platform che consente l'accesso a tutte le Microsoft Graph APIs, inclusi servizi come SharePoint, Exchange e Outlook, usando un singolo endpoint. Supporta PowerShell 7+, modern authentication tramite MSAL, external identities e advanced queries. Con un focus su least privilege access, garantisce operazioni sicure e riceve aggiornamenti regolari per allinearsi alle ultime funzionalità della Microsoft Graph API. Segui questo link per le [**installation instructions**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation). @@ -294,25 +294,25 @@ I comandi in Microsoft Graph PowerShell sono strutturati come: `-Mg [!TIP] > Questo è stato sostituito da Microsoft Graph PowerShell -Segui questo link per le [**istruzioni di installazione**](https://www.powershellgallery.com/packages/AzureAD). +Segui questo link per le [**installation instructions**](https://www.powershellgallery.com/packages/AzureAD). -## Strumenti automatizzati per Recon & Compliance +## Automated Recon & Compliance Tools ### [turbot azure plugins](https://github.com/orgs/turbot/repositories?q=mod-azure) -Turbot con steampipe e powerpipe permette di raccogliere informazioni da Azure e Entra ID, eseguire controlli di compliance e individuare misconfigurazioni. I moduli Azure attualmente più raccomandati da eseguire sono: +Turbot con steampipe e powerpipe permette di raccogliere informazioni da Azure e Entra ID ed eseguire controlli di compliance e trovare misconfigurazioni. I moduli Azure attualmente più consigliati da eseguire sono: - [https://github.com/turbot/steampipe-mod-azure-compliance](https://github.com/turbot/steampipe-mod-azure-compliance) - [https://github.com/turbot/steampipe-mod-azure-insights](https://github.com/turbot/steampipe-mod-azure-insights) @@ -343,9 +343,9 @@ powerpipe server ``` ### [Prowler](https://github.com/prowler-cloud/prowler) -Prowler è uno strumento di sicurezza open source per eseguire security best practices assessments, audits, incident response, continuous monitoring, hardening e forensics readiness su AWS, Azure, Google Cloud e Kubernetes. +Prowler è uno strumento di sicurezza Open Source per eseguire assessment, audit, incident response, continuous monitoring, hardening e forensics readiness sulle best practice di sicurezza di AWS, Azure, Google Cloud e Kubernetes. -Permette fondamentalmente di eseguire centinaia di checks su un ambiente Azure per trovare security misconfigurations e raccogliere i risultati in json (e altri formati di testo) o visualizzarli sul web. +In pratica ci permette di eseguire centinaia di controlli su un ambiente Azure per trovare misconfigurazioni di sicurezza e raccogliere i risultati in json (e altri formati di testo) oppure verificarli sul web. ```bash # Create a application with Reader role and set the tenant ID, client ID and secret in prowler so it access the app @@ -367,9 +367,9 @@ docker run --rm -e "AZURE_CLIENT_ID=" -e "AZURE_TENANT_ID= ``` ### [Monkey365](https://github.com/silverhack/monkey365) -Permette di eseguire automaticamente revisioni della configurazione di sicurezza delle sottoscrizioni Azure e di Microsoft Entra ID. +Consente di eseguire automaticamente revisioni della configurazione di sicurezza di Azure subscriptions e Microsoft Entra ID. -I report HTML sono memorizzati nella directory `./monkey-reports` nella cartella del repository github. +I report HTML sono archiviati all'interno della directory `./monkey-reports` dentro la cartella del repository github. ```bash git clone https://github.com/silverhack/monkey365 Get-ChildItem -Recurse monkey365 | Unblock-File @@ -390,7 +390,7 @@ Invoke-Monkey365 -TenantId -ClientId -ClientSecret $Secu ``` ### [ScoutSuite](https://github.com/nccgroup/ScoutSuite) -Scout Suite raccoglie dati di configurazione per ispezione manuale e mette in evidenza le aree a rischio. È uno strumento di security-auditing multi-cloud, che consente la valutazione della postura di sicurezza degli ambienti cloud. +Scout Suite raccoglie dati di configurazione per l'ispezione manuale ed evidenzia le aree di rischio. È uno strumento multi-cloud per l'auditing della sicurezza, che consente la valutazione della security posture degli ambienti cloud. ```bash virtualenv -p python3 venv source venv/bin/activate @@ -406,18 +406,26 @@ python scout.py azure --cli ``` ### [Azure-MG-Sub-Governance-Reporting](https://github.com/JulianHayward/Azure-MG-Sub-Governance-Reporting) -È uno script PowerShell che ti aiuta a **visualizzare tutte le risorse e le autorizzazioni all'interno di un Management Group e dell'Entra ID** tenant e a individuare misconfigurazioni di sicurezza. +È uno script powershell che aiuta a **visualizzare tutte le risorse e le permissions all'interno di un Management Group e del tenant Entra ID** e a trovare configurazioni errate di sicurezza. -Funziona usando il modulo Az PowerShell, quindi qualsiasi autenticazione supportata da questo modulo è supportata dallo script. +Funziona usando il modulo Az PowerShell, quindi qualsiasi autenticazione supportata da questo tool è supportata dal tool. ```bash import-module Az .\AzGovVizParallel.ps1 -ManagementGroupId [-SubscriptionIdWhitelist ] ``` -## Automated Post-Exploitation tools +## Strumenti automatizzati di Post-Exploitation -### [**ROADRecon**](https://github.com/dirkjanm/ROADtools) +### [**ROADtools**](https://github.com/dirkjanm/ROADtools) / ROADrecon / ROADtx -L'enumeration di ROADRecon fornisce informazioni sulla configurazione di Entra ID, come utenti, gruppi, ruoli, policy di accesso condizionale... +ROADtools è uno dei principali framework open-source per la ricerca offensiva su Entra ID. I componenti più rilevanti sono: + +- **`roadrecon`**: discovery del tenant e generazione di dataset locale (users, groups, roles, devices, service principals, applications, directory settings). +- **`roadtx`**: acquisizione/scambio di token, riuso di refresh-token, registrazione di dispositivi e workflow PRT. +- **`roadlib`**: libreria di auth/API di livello più basso usata dagli altri moduli. + +I dati raccolti vengono memorizzati in un database SQLite locale e possono essere esplorati nella web UI di ROADrecon, utile per mappare utenti privilegiati, assegnazioni di ruolo, dispositivi, service principals e relazioni tra applicazioni prima di pianificare persistence o lateral movement. + +#### Raccolta ROADrecon ```bash cd ROADTools pipenv shell @@ -428,15 +436,48 @@ roadrecon auth --as-app --client "" --password "" --tenant "< roadrecon gather roadrecon gui ``` +ROADrecon ha originariamente preso di mira Azure AD Graph. A partire dal **22 maggio 2026**, il repository ufficiale mantiene ancora il supporto per Microsoft Graph nel branch **`msgraph`**, e fork della community come **Tom2Byrne/ROADtools** continuano ad aggiornare la raccolta basata su Graph. Nelle build compatibili con Graph, ROADrecon aggiunge il switch **`-mg`** per enumerare endpoint come **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`** e **`/applications`**. +```bash +# Graph-capable ROADrecon builds +roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!" +roadrecon gather -mg +roadrecon gui +``` +#### Casi d'uso ad alto valore di ROADtx + +Se hai già credenziali valide, un refresh token, o una sessione derivata da PRT, ROADtx viene comunemente usato per: + +- **Registrare un rogue dispositivo Entra ID** contro **`urn:ms-drs:enterpriseregistration.windows.net`** per ottenere device keys/certificates e creare accesso duraturo basato sul device. +- **Scambiare/riusare refresh tokens** per ottenere nuovi Microsoft Graph o altri resource tokens senza ripetere l'interactive sign-in. +- **Abusare dei flussi PRT** per mintare silenziosamente nuovi access tokens in background. + +Un utile indizio di hunting è che i valori predefiniti di **`roadtx device`** sono stati storicamente: + +- **OS**: `Windows` +- **OS version**: `10.0.19041.928` +- **Name**: `DESKTOP-` + +Questi valori sono facili da cambiare, quindi considerali come **weak indicators**. Restano comunque utili se correlati con eventi insoliti di device registration, pattern di naming non aziendali, source IPs/geos/ASNs sospetti, o user agents scriptati. + +#### Note opsec / hunting di ROADtools + +Poiché ROADtools usa API legittime di Microsoft identity, i defender dovrebbero fare hunting per la **combinazione** di attività sui token, pattern di enumeration e anomalie di user-agent invece di aspettarsi firme simili a malware. I segnali utili includono: + +- Operazioni di audit di **Device registration** come `Add device`, `Add registered owner to device`, `Add registered user to device`, e `Register device` +- Requests o sign-ins legati a **Device Registration Service** +- User agents simili a script come **`python-requests`**, **`urllib`**, o **`curl`** +- Letture a raffica di Microsoft Graph contro endpoint ricchi di discovery come **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`**, e **`/applications`** +- Scopes OAuth potenti che compaiono nei dati di audit, soprattutto **`Directory.ReadWrite.All`**, **`Device.ReadWrite.All`**, **`Application.ReadWrite.All`**, **`AuditLog.ReadWrite.All`**, e **`Policy.ReadWrite.All`** + ### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound) -AzureHound è il collector di BloodHound per Microsoft Entra ID e Azure. È un singolo binario statico Go per Windows/Linux/macOS che comunica direttamente con: +AzureHound è il BloodHound collector per Microsoft Entra ID e Azure. È un singolo binario Go statico per Windows/Linux/macOS che parla direttamente con: - Microsoft Graph (Entra ID directory, M365) e - Azure Resource Manager (ARM) control plane (subscriptions, resource groups, compute, storage, key vault, app services, AKS, etc.) -Caratteristiche principali -- Funziona da qualsiasi punto di Internet pubblico contro le API del tenant (non è necessario accesso alla rete interna) -- Genera JSON per l'ingestione in BloodHound CE per visualizzare i percorsi d'attacco tra identità e risorse cloud +Caratteristiche chiave +- Esegue da qualsiasi punto su internet pubblico contro le tenant APIs (non è richiesto accesso alla rete interna) +- Produce JSON per l'ingestion in BloodHound CE per visualizzare i attack paths tra identities e cloud resources - User-Agent predefinito osservato: azurehound/v2.x.x Opzioni di autenticazione @@ -482,36 +523,36 @@ azurehound list web-apps -t "" -o webapps.json azurehound list function-apps -t "" -o funcapps.json ``` Cosa viene interrogato -- Graph endpoints (esempi): +- Endpoint Graph (esempi): - /v1.0/organization, /v1.0/users, /v1.0/groups, /v1.0/roleManagement/directory/roleDefinitions, directoryRoles, owners/members -- ARM endpoints (esempi): +- Endpoint ARM (esempi): - management.azure.com/subscriptions/.../providers/Microsoft.Storage/storageAccounts - .../Microsoft.KeyVault/vaults, .../Microsoft.Compute/virtualMachines, .../Microsoft.Web/sites, .../Microsoft.ContainerService/managedClusters -Comportamento preflight ed endpoint -- Ogni azurehound list tipicamente esegue queste chiamate di test prima dell'enumerazione: -1) Piattaforma di identity: login.microsoftonline.com +Comportamento di preflight e endpoint +- Ogni azurehound list in genere esegue queste chiamate di test prima dell'enumeration: +1) Identity platform: login.microsoftonline.com 2) Graph: GET https://graph.microsoft.com/v1.0/organization 3) ARM: GET https://management.azure.com/subscriptions?api-version=... -- Gli URL base degli ambienti cloud differiscono per Government/China/Germany. Vedi constants/environments.go nel repo. +- Le base URL dell'ambiente cloud differiscono per Government/China/Germany. Vedi constants/environments.go nel repo. -Oggetti ARM-heavy (meno visibili in Activity/Resource logs) -- La seguente lista di target usa prevalentemente letture del control plane ARM: automation-accounts, container-registries, function-apps, key-vaults, logic-apps, managed-clusters, management-groups, resource-groups, storage-accounts, storage-containers, virtual-machines, vm-scale-sets, web-apps. -- Queste operazioni GET/list tipicamente non vengono scritte negli Activity Logs; le letture sul data-plane (es. *.blob.core.windows.net, *.vault.azure.net) sono coperte da Diagnostic Settings a livello di risorsa. +Oggetti ARM-heavy (meno visibili nei log Activity/Resource) +- Il seguente elenco di target usa principalmente letture del control plane ARM: automation-accounts, container-registries, function-apps, key-vaults, logic-apps, managed-clusters, management-groups, resource-groups, storage-accounts, storage-containers, virtual-machines, vm-scale-sets, web-apps. +- Queste operazioni GET/list in genere non vengono scritte negli Activity Logs; le letture del data-plane (ad es. *.blob.core.windows.net, *.vault.azure.net) sono coperte da Diagnostic Settings a livello di risorsa. Note OPSEC e logging -- Microsoft Graph Activity Logs non sono abilitati di default; abilitarli ed esportarli verso un SIEM per ottenere visibilità delle chiamate Graph. Aspettati la preflight GET /v1.0/organization del Graph con UA azurehound/v2.x.x. -- I non-interactive sign-in logs di Entra ID registrano l'autenticazione della identity platform (login.microsoftonline.com) usata da AzureHound. -- Le operazioni di lettura/list del control-plane ARM non vengono registrate negli Activity Logs; molte operazioni azurehound list contro risorse non appariranno lì. Solo il logging del data-plane (tramite Diagnostic Settings) catturerà le letture verso gli endpoint di servizio. -- Defender XDR GraphApiAuditEvents (preview) può esporre chiamate Graph e identificatori di token ma potrebbe non includere UserAgent e avere retention limitata. +- I Microsoft Graph Activity Logs non sono abilitati per default; abilitali ed esportali in SIEM per ottenere visibilità delle chiamate Graph. Aspettati il preflight Graph GET /v1.0/organization con UA azurehound/v2.x.x. +- I log di sign-in non interattivi di Entra ID registrano l'autenticazione della identity platform (login.microsoftonline.com) usata da AzureHound. +- Le operazioni di lettura/list del control plane ARM non vengono registrate negli Activity Logs; molte operazioni azurehound list contro le risorse non compariranno lì. Solo il logging del data-plane (tramite Diagnostic Settings) catturerà le letture verso gli endpoint del servizio. +- Defender XDR GraphApiAuditEvents (preview) può esporre le chiamate Graph e gli identificatori dei token, ma potrebbe non includere UserAgent e avere una retention limitata. -Suggerimento: quando enumeri per percorsi di privilegio, esporta users, groups, roles e role assignments, poi importa in BloodHound e usa le query cypher prebuilt per evidenziare Global Administrator/Privileged Role Administrator e escalation transitiva tramite nested groups e assegnazioni RBAC. +Suggerimento: Quando fai enumeration per i privilege paths, fai dump di users, groups, roles e role assignments, poi importa in BloodHound e usa query cypher predefinite per evidenziare Global Administrator/Privileged Role Administrator e l'escalation transitiva tramite nested groups e assegnazioni RBAC. -Avvia il web di BloodHound con `curl -L https://ghst.ly/getbhce | docker compose -f - up` e importa il file `output.json`. Poi, nella scheda EXPLORE, nella sezione CYPHER puoi vedere un'icona a forma di cartella che contiene query predefinite. +Avvia il web di BloodHound con `curl -L https://ghst.ly/getbhce | docker compose -f - up` e importa il file `output.json`. Poi, nella scheda EXPLORE, nella sezione CYPHER puoi vedere un'icona a cartella che contiene query predefinite. ### [**MicroBurst**](https://github.com/NetSPI/MicroBurst) -MicroBurst include funzioni e script che supportano la discovery dei servizi Azure, l'auditing di configurazioni deboli e azioni di post-exploitation come credential dumping. È pensato per essere usato durante penetration tests dove è presente Azure. +MicroBurst include funzioni e script che supportano la discovery dei servizi Azure, l'audit di configurazioni deboli e azioni di post exploitation come il credential dumping. È pensato per essere usato durante i penetration test in cui Azure è in uso. ```bash Import-Module .\MicroBurst.psm1 Import-Module .\Get-AzureDomainInfo.ps1 @@ -519,9 +560,9 @@ Get-AzureDomainInfo -folder MicroBurst -Verbose ``` ### [**PowerZure**](https://github.com/hausec/PowerZure) -PowerZure è stato creato dalla necessità di un framework che possa effettuare sia reconnaissance che exploitation di Azure, EntraID e delle risorse associate. +PowerZure è stato creato per la necessità di un framework in grado di eseguire sia reconnaissance che exploitation di Azure, EntraID e delle risorse associate. -Usa il modulo **Az PowerShell**, quindi qualsiasi autenticazione supportata da questo modulo è supportata dallo strumento. +Utilizza il modulo **Az PowerShell**, quindi qualsiasi autenticazione supportata da questo strumento è supportata dallo strumento. ```bash # Login Import-Module Az @@ -552,7 +593,7 @@ Invoke-AzureRunCommand -Command -VMName ``` ### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner) -GraphRunner è un set di strumenti post-exploitation per interagire con la Microsoft Graph API. Fornisce vari strumenti per eseguire reconnaissance, persistence e esfiltrazione di dati da un account Microsoft Entra ID (Azure AD). +GraphRunner è un toolset di post-exploitation per interagire con la Microsoft Graph API. Fornisce vari tool per eseguire reconnaissance, persistence e pillaging di dati da un account Microsoft Entra ID (Azure AD). ```bash #A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens) Import-Module .\GraphRunner.ps1 @@ -596,9 +637,9 @@ Invoke-GraphRunner -Tokens $tokens ``` ### [Stormspotter](https://github.com/Azure/Stormspotter) -Stormspotter crea un “attack graph” delle risorse in una Azure subscription. Permette a red teams e pentesters di visualizzare l'attack surface e le pivot opportunities all'interno di un tenant, e potenzia i tuoi defenders per orientarsi rapidamente e stabilire le priorità nel lavoro di incident response. +Stormspotter crea un “attack graph” delle risorse in una Azure subscription. Permette ai red team e ai pentester di visualizzare l'attack surface e le opportunità di pivot all'interno di un tenant, e potenzia i tuoi defender per orientarsi rapidamente e dare priorità alle attività di incident response. -**Sfortunatamente, sembra non essere mantenuto**. +**Purtroppo, sembra non più manutenuto**. ```bash # Start Backend cd stormspotter\backend\ @@ -616,8 +657,12 @@ 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) ``` -## Riferimenti +## References - [Cloud Discovery With AzureHound (Unit 42)](https://unit42.paloaltonetworks.com/threat-actor-misuse-of-azurehound/) +- [Paved With Intent: ROADtools and Nation-State Tactics in the Cloud](https://unit42.paloaltonetworks.com/roadtools-cloud-attacks/) +- [ROADtools repository](https://github.com/dirkjanm/ROADtools) +- [ROADtools msgraph branch](https://github.com/dirkjanm/ROADtools/tree/msgraph) +- [Tom2Byrne/ROADtools](https://github.com/Tom2Byrne/ROADtools) - [AzureHound repository](https://github.com/SpecterOps/AzureHound) - [BloodHound repository](https://github.com/SpecterOps/BloodHound) - [AzureHound Community Edition Flags](https://bloodhound.specterops.io/collect-data/ce-collection/azurehound-flags)