mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 14:47:17 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-enumeration-tool
This commit is contained in:
@@ -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 <service> <action> <parameters>`
|
||||
I comandi in Azure CLI sono strutturati usando un pattern di: `az <service> <action> <parameters>`
|
||||
|
||||
#### 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 2>/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: `<Action>-Az<Service> <parameters>`
|
||||
I comandi nel modulo Azure PowerShell AZ sono strutturati come: `<Action>-Az<Service> <parameters>`
|
||||
|
||||
#### 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: `<Action>-Mg<Serv
|
||||
|
||||
#### Debug Microsoft Graph PowerShell
|
||||
|
||||
Usando il parametro **`-Debug`** è possibile vedere tutte le richieste che lo strumento invia:
|
||||
Usando il parametro **`-Debug`** è possibile vedere tutte le request che lo strumento sta inviando:
|
||||
```bash
|
||||
Get-MgUser -Debug
|
||||
```
|
||||
### ~~**AzureAD Powershell**~~
|
||||
|
||||
Il modulo Azure Active Directory (AD), ora **deprecato**, fa parte di Azure PowerShell per la gestione delle risorse Azure AD. Fornisce cmdlets per attività come la gestione di utenti, gruppi e registrazioni di applicazioni in Entra ID.
|
||||
Il modulo Azure Active Directory (AD), ora **deprecato**, fa parte di Azure PowerShell per la gestione delle risorse Azure AD. Fornisce cmdlet per attività come la gestione di utenti, gruppi e registrazioni di applicazioni in Entra ID.
|
||||
|
||||
> [!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=<client-id>" -e "AZURE_TENANT_ID=<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 <tenant-id> -ClientId <client-id> -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 <management-group-id> [-SubscriptionIdWhitelist <subscription-id>]
|
||||
```
|
||||
## 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 "<client-id>" --password "<secret>" --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-<RANDOM 8 DIGITS>`
|
||||
|
||||
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 "<tenant-id>" -o webapps.json
|
||||
azurehound list function-apps -t "<tenant-id>" -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 <object> tipicamente esegue queste chiamate di test prima dell'enumerazione:
|
||||
1) Piattaforma di identity: login.microsoftonline.com
|
||||
Comportamento di preflight e endpoint
|
||||
- Ogni azurehound list <object> 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 <command> -VMName <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)
|
||||
|
||||
Reference in New Issue
Block a user