
BadZure automatiza el despliegue de tenants de Entra ID y suscripciones de Azure intencionalmente mal configurados, poblándolos con entidades diversas y rutas de ataque configurables y recorribles.
# BadZure
[](https://www.blackhat.com/us-24/arsenal/schedule/index.html#badzure-simulating-and-exploring-entra-id-attack-paths-39628)
[](https://twitter.com/OTR_Community)
[](https://www.badzure.com)
<div align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6522/2d4b177acda6abc9a6be2e88de22def46daf37b70df452ae34d284aa51993986.png" alt="Logotipo de BadZure" style="width: 25%; height: 25%;">
</div>
<br>
BadZure es una herramienta Python que automatiza la creación de entornos de Azure mal configurados, permitiendo a los equipos de seguridad simular técnicas de adversario, desarrollar y probar controles de detección, y ejecutar ejercicios de equipo púrpura a través de Entra ID y la infraestructura de Azure. Utiliza Terraform para poblar inquilinos de Entra ID y suscripciones de Azure con entidades y configuraciones incorrectas intencionales, produciendo rutas de ataque completas que abarcan capas de identidad e infraestructura en la nube.
BadZure automatiza la creación de usuarios, grupos, registros de aplicaciones, entidades de servicio, unidades administrativas y recursos de Azure como Almacenes de claves, Cuentas de almacenamiento, Máquinas virtuales, Aplicaciones lógicas, Cuentas de automatización, Aplicaciones de funciones, Cuentas de Cosmos DB y Grupos de recursos. Para simular un inquilino realista, asigna aleatoriamente roles de Entra ID, permisos de Graph y permisos de acceso a recursos de Azure a los principios de seguridad seleccionados, imitando la proliferación orgánica de permisos que se encuentra en entornos reales. Sobre esta línea base realista, BadZure superpone configuraciones incorrectas intencionales a través de rutas de ataque configurables, produciendo cadenas de escalada de privilegios explotables para la simulación de adversario.
La ventaja clave de BadZure es su capacidad para poblar y purgar rápidamente inquilinos con configuraciones, acceso inicial preconfigurado y rutas de ataque intencionales, facilitando una simulación de adversario y desarrollo de detección continuos e iterativos. Está diseñado para profesionales de seguridad interesados en explorar y comprender la seguridad de Entra ID y Azure, las configuraciones incorrectas de recursos en la nube y las técnicas de ataque modernas nativas de la nube.
## Objetivos / Casos de uso
BadZure fue escrito originalmente para albergar el taller [Azure AD Battle School: Hands-on Attack and Defense](https://www.x33fcon.com/#!archive/2023/s/MauricioVelazco.md) en X33fcon 2023.
Un entorno de Azure poblado con BadZure ahora permite a los equipos rojo y azul:
* Experimentar con vectores de ataque comunes de Entra ID y técnicas de ataque modernas de infraestructura en la nube
* Configurar rápidamente inquilinos de Azure con rutas de ataque intencionales y recursos en la nube mal configurados
* Obtener telemetría completa de ataques a través de las capas de identidad e infraestructura para construir, probar y mejorar los controles de detección
* Ejecutar ejercicios de equipo púrpura que cubren tanto ataques de identidad tradicionales como escenarios de compromiso nativos de la nube en un entorno seguro
* Facilitar la formación práctica en seguridad de Entra ID y la nube con rutas de ataque
* Organizar eventos dinámicos de Capture the Flag (CTF) de seguridad en la nube de Azure con escenarios de ataque multivectoriales
## Rutas de ataque
### Acceso inicial
BadZure crea rutas de ataque que asumen que la identidad de acceso inicial ya ha sido comprometida. Cada ruta de ataque comienza con una cuenta de usuario o entidad de servicio comprometida, simulando escenarios del mundo real donde un atacante ha obtenido acceso mediante robo de credenciales, phishing, adversario en el medio u otras técnicas de acceso inicial.
BadZure proporciona las credenciales para estas identidades comprometidas, permitiendo a los profesionales de seguridad comenzar inmediatamente a explorar rutas de escalada de privilegios sin necesidad de simular el compromiso inicial. Este enfoque permite a los equipos centrarse en comprender y defenderse contra técnicas de ataque posteriores al compromiso en entornos de Azure y Entra ID.
### Escalada de privilegios
BadZure admite siete rutas de ataque de escalada de privilegios distintas que introducen configuraciones incorrectas en las capas de identidad de Entra ID e infraestructura en la nube de Azure:
### Escalada de privilegios basada en identidad
- **ApplicationOwnershipAbuse**: Explota la propiedad de aplicaciones para agregar credenciales a aplicaciones propias con altos privilegios
- **ApplicationAdministratorAbuse**: Explota el rol de Administrador de aplicaciones de Entra ID para administrar cualquier aplicación y agregar credenciales a aplicaciones privilegiadas
- **CloudAppAdministratorAbuse**: Explota el rol de Administrador de aplicaciones en la nube de Entra ID — alcance más reducido que el de Administrador de aplicaciones
- **ManagedIdentityAbuse**: Explota el acceso a recursos de Azure (VM, Logic Apps, Automation Accounts, Function Apps) con identidades administradas para robar tokens de identidad y pivotar a otros recursos en la nube
- **Orígenes admitidos**: Máquinas virtuales, Aplicaciones lógicas, Cuentas de automatización, Aplicaciones de funciones (Linux/Python)
- **Destinos admitidos**: Almacén de claves, Cuenta de almacenamiento, Cosmos DB
- **Tipos de credenciales**: Secretos (predeterminado) o certificados
### Escalada de privilegios basada en recursos
- **KeyVaultSecretTheft**: Escalada de privilegios directa mediante acceso a Azure Key Vault para recuperar secretos de aplicaciones
- **StorageCertificateTheft**: Escalada de privilegios directa mediante acceso a Azure Storage Account para recuperar certificados de aplicaciones
- **CosmosDBSecretTheft**: Escalada de privilegios directa mediante acceso a Azure Cosmos DB para recuperar secretos de aplicaciones almacenados como documentos de base de datos
Cada ruta de ataque se puede configurar con asignaciones de roles específicas o aleatorias y admite varios tipos de principal según la técnica. Para opciones de configuración detalladas y descripciones de las rutas de ataque, consulte la [documentación](https://www.badzure.com/attack-paths/).
A continuación se muestra un gráfico generado por BloodHound que muestra las rutas de ataque que BadZure puede crear.
<div align="center">
<img src="https://assets.kitploit.com/production/public/readmes/6522/aa4fe7dfe6720e6cc376c3e7542112160720719763e33646011ec23b3722e413.png" alt="BloodHound" style="width: 50%; height: 50%;">
</div>
<br>
## Demo
[](https://www.youtube.com/watch?v=IzurUrOsvsQ&t=746s)
## Guía de inicio rápido
### Requisitos
- **Azure CLI**: Siga las instrucciones [aquí](https://docs.microsoft.com/en-us/cli/azure/install-azure-cli) para instalar Azure CLI.
- **Terraform**: Siga las instrucciones [aquí](https://learn.hashicorp.com/tutorials/terraform/install-cli) para instalar Terraform.
### Crear un inquilino de Entra ID
[Crear una suscripción de Azure](https://learn.microsoft.com/en-us/training/modules/create-an-azure-account/1-introduction) también le proporcionará un inquilino de Entra ID.
**Nota:** BadZure utiliza solo funciones del nivel Gratuito de Entra ID y no incurrirá en costos de licencia adicionales, aunque los recursos de Azure como Máquinas Virtuales y Aplicaciones de funciones generarán cargos de cómputo estándar.
### Clonar el repositorio
````shell
git clone https://github.com/mvelazc0/BadZure
cd BadZure
````
### Crear un entorno virtual e instalar dependencias
```shell
# Create a virtual environment
python -m venv venv
# Activate the virtual environment
# On Windows
venv\Scripts\activate
# On Unix or MacOS
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
```
### Iniciar sesión en Azure
Debe iniciar sesión como **Administrador global** en Entra ID y tener el rol **Propietario** de RBAC en la suscripción de Azure:
```shell
az login
````
### Crear y destruir inquilinos mal configurados
````shell
# Display the help menu
python badzure.py --help
# Populate a tenant and configure all attack paths using the default badzure.yml config file
python badzure.py build
# Populate a tenant and configure all attack paths with a different config file
python badzure.py build --config config.yml
# Show the created resources in Entra ID tenant
python badzure.py show
# Destroy all created identities with verbose logging
python badzure.py destroy --verbose
````
## Documentación
La documentación completa está disponible en [www.badzure.com](https://www.badzure.com/), incluyendo la guía de [Primeros pasos](https://www.badzure.com/getting-started/), la [Referencia de configuración](https://www.badzure.com/configuration/) y las descripciones detalladas de [Rutas de ataque](https://www.badzure.com/attack-paths/).
## Autor
* **Mauricio Velazco** - [@mvelazco](https://twitter.com/mvelazco)
## Contribuyentes
* [Chan Huan Jun](https://www.linkedin.com/in/chan-huan-jun-50a704115/)
* [Manuel Melendez](https://www.linkedin.com/in/manuel-melendez-b62298238/)
## Referencias
* [Cloud Katana](https://github.com/Azure/Cloud-Katana) por [Roberto Rodriguez](https://twitter.com/Cyb3rWard0g)
* [AADInternals](https://github.com/Gerenios/AADInternals) por [Nestori Syynimaa](https://twitter.com/DrAzureAD)
* [Azure Attack Paths](https://cloudbrothers.info/en/azure-attack-paths/) por [Fabian Bader](https://twitter.com/fabian_bader)
* [ROADtools](https://github.com/dirkjanm/ROADtools) por [Dirkjan Mollema](https://twitter.com/_dirkjan)
* [PurpleCloud](https://github.com/iknowjason/PurpleCloud) por [Jason Ostrom](https://twitter.com/securitypuck)
* [Azure AD - Attack and Defense Playbook](https://github.com/Cloud-Architekt/AzureAD-Attack-Defense) por [Sami Lamppu](https://twitter.com/samilamppu) y [Thomas Naunheim](https://twitter.com/Thomas_Live)
* [BloodHound/AzureHound](https://github.com/BloodHoundAD/AzureHound) por [Andy Robbins](https://twitter.com/_wald0)
* Publicaciones de blog, charlas y herramientas de [@Haus3c](https://twitter.com/Haus3c), [@kfosaaen](https://twitter.com/kfosaaen), [@inversecos](https://twitter.com/inversecos) y otros.
## Licencia
Este proyecto está licenciado bajo la Licencia Apache 2.0 - consulte el archivo [LICENSE](https://github.com/mvelazc0/badzure/blob/main/LICENSE) para más detalles.