
Azure RedOps es un kit de seguridad ofensiva para evaluar la postura de seguridad de Microsoft Entra ID
Una herramienta navaja suiza para red teaming en Azure / Entra ID.
Autor: Mr.Un1k0d3r (TrueCyber Inc) Versión: 0.1 Lenguaje: Python 3.12+
AzureRedOps es un conjunto de herramientas de seguridad ofensiva para evaluar la postura de seguridad de los inquilinos de Microsoft Entra ID y Azure. Envuelve los flujos de trabajo más comunes de red team — autenticación, gestión de tokens, enumeración de directorios, verificación de privilegios, pulverización de contraseñas y acciones posteriores a la explotación contra Microsoft Graph — detrás de una CLI consistente impulsada por --activity. Cada operación se selecciona con -a/--activity. Los tokens obtenidos durante la autenticación pueden almacenarse en caché localmente (.azure_creds) y reutilizarse por nombre con -l/--load-access-token, por lo que rara vez tendrás que pegar JWTs sin procesar.
Aprende más sobre la herramienta en el blog de CYPFER
.azure_creds). Cualquier flujo puede persistir sus tokens automáticamente con -s/--save + -n/--name.auth) — autenticación directa con nombre de usuario/contraseña.phish-start / phish-capture) — abusa de la concesión de autorización de dispositivo OAuth para capturar tokens emitidos cuando un objetivo ingresa tu código de usuario en microsoft.com/devicelogin. Captura automática por defecto.auth-app) — flujo completo de Código de Autorización + PKCE contra un registro de aplicación personalizado, servido por un listener HTTPS local integrado que recibe la redirección.auth-interactive) — conducir un navegador real (Playwright; Firefox por defecto, -br para cambiar) (maneja MFA / Acceso Condicional / SSO), luego cosechar cada token de la sesión HAR grabada.refresh) — intercambiar un token de actualización por tokens de acceso nuevos.obo) — intercambiar un token de acceso ya emitido por un nuevo token con ámbito para un recurso descendente (OAuth 2.0 jwt-bearer / OBO).browser-sso) — abrir un navegador real ya autenticado como el usuario directamente en la aplicación web objetivo (Outlook en la web, Teams, SharePoint, el portal de Azure, ...). Con -aprt/--auto-prt genera automáticamente una cookie de Primary Refresh Token (PRT) a partir de un token de actualización (registro de dispositivo → PRT → x-ms-RefreshTokenCredential), de modo que un navegador fresco completa el inicio de sesión único sin inicio de sesión manual.gather-all.spray) y pulverización de tokens de actualización entre aplicaciones (spray-refresh).magic-app encuentra aplicaciones con redireccionamiento público y consentimiento AllPrincipals; listas incorporadas de IDs de aplicación de Microsoft conocidas/interesantes.requirements.txt):
PyJWTrequestsplaywrightcryptography (solo necesario para browser-sso -aprt, el flujo auto-PRT)auth-interactive, browser-sso). Firefox es el motor predeterminado (-br/--browser); instálalo con python -m playwright install firefox.includes/web/cert.pem y includes/web/key.pem (solo necesario para el flujo PKCE de auth-app — ver Notas).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
Ejecuta la herramienta:```bash
python3 AzureRedOps.py -a <activity> [options]
El patrón de invocación general es:```bash python3 AzureRedOps.py -a [authentication] [activity options] [global options]
### Proporcionando un token
Las actividades que llaman a Microsoft Graph necesitan un token de acceso. Puedes proporcionarlo de dos maneras:
| Método | Bandera | Ejemplo |
|--------|---------|---------|
| Pasar un token sin procesar | `-ac, --access-token` | `-ac eyJ0eXAi...` |
| Cargar un token almacenado en caché por nombre | `-l, --load-access-token` | `-l mytoken` |
Cuando se usa `-l`, el `access_token` coincidente (y, cuando sea relevante, `refresh_token` y `tenant`) se lee del almacén `.azure_creds`.
### Guardando tokens en un archivo (`-s` / `-n`)
Cualquier actividad que obtenga tokens (`auth`, `auth-app`, `auth-interactive`, `phish-start`/`phish-capture`, `refresh`) puede **persistirlos automáticamente** en el almacén de credenciales local (`.azure_creds`) añadiendo `-s/--save` junto con `-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 activa el guardado automático; requiere -n/--name — la herramienta finaliza con un error si falta -n.-n/--name es la clave bajo la cual se almacena el token. Más tarde puedes reutilizarlo con -l victim1 en lugar de pegar el JWT sin procesar, verlo con -a view -n victim1, o eliminarlo con -a delete -n victim1.auth-interactive siempre se guarda automáticamente y te pedirá un nombre de forma interactiva si no se proporciona -n.-j)La mayoría de las actividades de enumeración (list-users, list-applications, list-principals, gather-all, raw-url) aceptan -j/--json <filename> para escribir la respuesta sin procesar de la API en un archivo JSON en lugar de (o además de) imprimirla:```bash
python3 AzureRedOps.py -a list-users -l victim1 -j users.json
Para `gather-all`, el nombre de archivo proporcionado se utiliza como sufijo y se escribe un archivo por endpoint de Graph (por ejemplo, `users-<name>`, `groups-<name>`, ...).
> Consejo: `-j` controla la exportación JSON estructurada, mientras que `-re/--redirect-to-file` refleja la salida formateada de la consola en `output.txt`. Ambos son independientes.
### Identificadores de inquilino