
Azure RedOps è un toolkit di sicurezza offensiva per valutare la postura di sicurezza di Microsoft Entra ID
Un coltellino svizzero per il red teaming su Azure / Entra ID.
Autore: Mr.Un1k0d3r (TrueCyber Inc) Versione: 0.1 Linguaggio: Python 3.12+
AzureRedOps è un toolkit di sicurezza offensivo per valutare la postura di sicurezza
dei tenant di Microsoft Entra ID e Azure. Racchiude i flussi di lavoro più
comuni del red team — autenticazione, gestione dei token, enumerazione delle directory,
verifica dei privilegi, password spraying e azioni post-sfruttamento contro
Microsoft Graph — dietro una CLI coerente guidata da --activity.
Ogni operazione viene selezionata con -a/--activity. I token ottenuti durante
l'autenticazione possono essere memorizzati nella cache localmente (.azure_creds)
e riutilizzati per nome con -l/--load-access-token, così raramente dovrai
incollare JWT grezzi.
Scopri di più sullo strumento sul blog CYPFER
.azure_creds).
Qualsiasi flusso può persistere automaticamente i propri token con
-s/--save + -n/--name.auth) — autenticazione diretta con nome utente/password.phish-start / phish-capture) —
abusa della concessione di autorizzazione del dispositivo OAuth per catturare
i token emessi quando un target inserisce il tuo codice utente su
microsoft.com/devicelogin. Acquisizione automatica per impostazione predefinita.auth-app) — flusso completo
Authorization Code + PKCE contro una registrazione personalizzata
dell'applicazione, servito da un listener HTTPS locale integrato che
riceve il reindirizzamento.auth-interactive) — guida un
browser reale (Playwright; Firefox di default, -br per cambiare)
(gestisce MFA / Conditional Access / SSO), poi raccoglie ogni token dalla
sessione HAR registrata.refresh) — scambia un token di
aggiornamento per nuovi token di accesso.obo) — scambia un token di accesso già
emesso per un nuovo token con ambito per una risorsa a valle
(OAuth 2.0 jwt-bearer / OBO).browser-sso) — apre un browser reale
già autenticato come utente direttamente nell'app web di destinazione
(Outlook sul web, Teams, SharePoint, il portale Azure, ...). Con
-aprt/--auto-prt genera automaticamente un cookie
Primary Refresh Token (PRT) da un token di aggiornamento
(registrazione dispositivo → PRT → x-ms-RefreshTokenCredential),
così un nuovo browser completa il single sign-on senza login manuale.gather-all.spray)
e spraying di token di aggiornamento tra app (spray-refresh).magic-app trova app reindirizzabili
pubblicamente con consenso AllPrincipals; elenchi incorporati di ID di
app Microsoft noti/interessanti.requirements.txt):
PyJWTrequestsplaywrightcryptography (necessario solo per browser-sso -aprt, il flusso auto-PRT)auth-interactive,
browser-sso). Firefox è il motore predefinito (-br/--browser); installalo
con python -m playwright install firefox.includes/web/cert.pem e includes/web/key.pem
(necessario solo per il flusso PKCE auth-app — vedi Note).git clone AzureRedOps cd AzureRedOps
python3 -m venv AzureRedOps source AzureRedOps/bin/activate # Linux / macOS
pip install -r requirements.txt
python -m playwright install firefox
Esegui lo strumento:```bash
python3 AzureRedOps.py -a <activity> [options]
Il modello generale di invocazione è:```bash python3 AzureRedOps.py -a [authentication] [activity options] [global options]
### Fornire un token
Le attività che chiamano Microsoft Graph richiedono un token di accesso. Puoi fornirlo in due modi:
| Method | Flag | Example |
|--------|------|---------|
| Passa un token grezzo | `-ac, --access-token` | `-ac eyJ0eXAi...` |
| Carica un token memorizzato per nome | `-l, --load-access-token` | `-l mytoken` |
Quando si usa `-l`, il `access_token` corrispondente (e, quando rilevante, `refresh_token`
e `tenant`) viene letto dal deposito `.azure_creds`.
### Salvare i token in un file (`-s` / `-n`)
Qualsiasi attività che ottiene token (`auth`, `auth-app`, `auth-interactive`,
`phish-start`/`phish-capture`, `refresh`) può **persisterli automaticamente** nel
deposito di credenziali locale (`.azure_creds`) aggiungendo `-s/--save` insieme a
`-n/--name`:```bash
# Authenticate and save the resulting tokens under the name "victim1"
python3 AzureRedOps.py -a auth -u [email protected] -p 'P@ssw0rd!' -tid <tenant-guid> -s -n victim1
-s/--save attiva il salvataggio automatico; richiede -n/--name — lo strumento termina con un errore se -n è assente.-n/--name è la chiave sotto cui viene memorizzato il token. Puoi riutilizzarlo successivamente con -l victim1 invece di incollare il JWT grezzo, visualizzarlo con -a view -n victim1, o eliminarlo con -a delete -n victim1.auth-interactive salva sempre automaticamente e ti chiederà un nome interattivamente se -n non viene fornito.-j)La maggior parte delle attività di enumerazione (list-users, list-applications, list-principals,
gather-all, raw-url) accettano -j/--json <nomefile> per scrivere la risposta API grezza in un file JSON invece di (o in aggiunta a) stamparla:```bash
python3 AzureRedOps.py -a list-users -l victim1 -j users.json
For `gather-all`, the supplied filename is used as a suffix and one file is written
per Graph endpoint (e.g. `users-<name>`, `groups-<name>`, ...).
> Suggerimento: `-j` controlla l'esportazione JSON strutturata, mentre `-re/--redirect-to-file` rispecchia l'output formattato della console su `output.txt`. I due sono indipendenti.
### Tenant identifiers
- `-t, --tenant` si aspetta un **nome di dominio** (es. `contoso.com`) ed è usato dall'attività `id`.
- `-tid, --tenant-id` si aspetta un **GUID del tenant** o `common`, usato dalle attività di autenticazione.
---
## Opzioni da riga di comando