# Azure Pentesting {{#include ../../banners/hacktricks-training.md}} ## Información Básica Aprende los conceptos básicos de Azure y Entra ID en la siguiente página: {{#ref}} az-basic-information/ {{#endref}} ## Metodología de Pentesting/Red Team de Azure Para auditar un entorno AZURE, es muy importante saber: qué **servicios se están utilizando**, qué está **siendo expuesto**, quién tiene **acceso** a qué, y cómo están conectados los servicios internos de Azure y los **servicios externos**. Desde el punto de vista de un Red Team, el **primer paso para comprometer un entorno de Azure** es lograr obtener algún **punto de apoyo**. ### Enumeración Externa y Acceso Inicial El primer paso es, por supuesto, enumerar información sobre el inquilino que estás atacando y tratar de obtener un punto de apoyo. Basado en el nombre de dominio, es posible saber **si la empresa está usando Azure**, obtener el **ID del inquilino**, obtener otros **dominios válidos** en el mismo inquilino (si hay más) y obtener **información relevante** como si SSO está habilitado, configuraciones de correo, correos electrónicos de usuarios válidos... Consulta la siguiente página para aprender cómo realizar la **enumeración externa**: {{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}} Con esta información, las formas más comunes de intentar obtener un punto de apoyo son: - **OSINT**: Busca **filtraciones** en Github o cualquier otra plataforma de código abierto que pueda contener **credenciales** o información interesante. - Reutilización de **contraseñas**, filtraciones o [password spraying](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md) - Comprar credenciales a un empleado - [**Phishing Común**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (credenciales o aplicación Oauth) - [Phishing de Autenticación con Código de Dispositivo](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md) - **Terceros comprometidos** - Vulnerabilidades en Aplicaciones Alojadas en Azure - [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) con acceso al endpoint de metadatos - **Tomas de subdominio** como en [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/) - **Otras configuraciones incorrectas de servicios de Azure** - Si alguna laptop de desarrollador está comprometida ([WinPEAS y LinPEAS](https://github.com/peass-ng/PEASS-ng) pueden encontrar esta información): - Dentro de **`/.Azure`** - **`azureProfile.json`** contiene información sobre usuarios conectados en el pasado - **`clouds.config` contiene** información sobre suscripciones - **`service_principal_entries.json`** contiene credenciales de aplicaciones (ID de inquilino, clientes y secreto). Solo en Linux y macOS - **`msal_token_cache.json`** contiene tokens de acceso y tokens de actualización. Solo en Linux y macOS - **`service_principal_entries.bin`** y **msal_token_cache.bin** se utilizan en Windows y están encriptados con DPAPI - **`msal_http_cache.bin`** es un caché de solicitudes HTTP - Cárgalo: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)` - **`AzureRmContext.json`** contiene información sobre inicios de sesión anteriores usando Az PowerShell (pero no credenciales) - Dentro de **`C:\Users\\AppData\Local\Microsoft\IdentityCache\*`** hay varios archivos `.bin` con **tokens de acceso**, tokens de ID e información de cuentas encriptada con el DPAPI del usuario. - Es posible encontrar más **tokens de acceso** en los archivos `.tbres` dentro de **`C:\Users\\AppData\Local\Microsoft\TokenBroken\Cache\`** que contienen un base64 encriptado con DPAPI con tokens de acceso. - En Linux y macOS puedes obtener **tokens de acceso, tokens de actualización y tokens de ID** desde Az PowerShell (si se usó) ejecutando `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"` - En Windows, esto solo genera tokens de ID. - Es posible ver si se usó Az PowerShell en Linux y macOS verificando si existe `$HOME/.local/share/.IdentityService/` (aunque los archivos contenidos están vacíos y son inútiles) Encuentra **otras configuraciones incorrectas de servicios de Azure** que pueden llevar a un punto de apoyo en la siguiente página: {{#ref}} az-unauthenticated-enum-and-initial-entry/ {{#endref}} > [!NOTE] > Recuerda que generalmente la parte **más ruidosa** de la enumeración es el **inicio de sesión**, no la enumeración en sí. ### Herramientas de Azure y Entra ID Las siguientes herramientas serán muy útiles para enumerar tanto inquilinos de Entra ID como entornos de Azure lentamente (para evitar detección) o automáticamente (para ahorrar tiempo): {{#ref}} az-enumeration-tools.md {{#endref}} ### Bypass de Políticas de Acceso
En casos donde tienes algunas credenciales válidas pero no puedes iniciar sesión, estas son algunas protecciones comunes que podrían estar en su lugar: - **Lista blanca de IP** -- Necesitas comprometer una IP válida - **Restricciones geográficas** -- Encuentra dónde vive el usuario o dónde están las oficinas de la empresa y obtén una IP de la misma ciudad (o país al menos) - **Navegador** -- Tal vez solo se permite un navegador de cierto SO (Windows, Linux, Mac, Android, iOS). Descubre qué SO usa la víctima/empresa. - También puedes intentar **comprometer credenciales de Service Principal** ya que suelen ser menos limitadas y su inicio de sesión es menos revisado Después de eludirlo, podrías ser capaz de volver a tu configuración inicial y aún tendrás acceso. Consulta: {{#ref}} az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md {{#endref}} ### Whoami > [!CAUTION] > Aprende **cómo instalar** az cli, AzureAD y Az PowerShell en la sección [**Az - Entra ID**](az-services/az-azuread.md). Una de las primeras cosas que necesitas saber es **quién eres** (en qué entorno estás): {{#tabs }} {{#tab name="az cli" }} ```bash az account list az account tenant list # Current tenant info az account subscription list # Current subscription info az ad signed-in-user show # Current signed-in user az ad signed-in-user list-owned-objects # Get owned objects by current user az account management-group list #Not allowed by default ``` {{#endtab }} {{#tab name="Az" }} ```bash # Get the information about the current context (Account, Tenant, Subscription etc.) Get-AzContext # List all available contexts Get-AzContext -ListAvailable # Enumerate subscriptions accessible by the current user Get-AzSubscription #Get Resource group Get-AzResourceGroup ``` {{#endtab }} {{#tab name="Mg" }} ```bash #Get the current session Get-MgContext ``` {{#endtab }} {{#tab name="AzureAD" }} ```bash #Get the current session state Get-AzureADCurrentSessionInfo #Get details of the current tenant Get-AzureADTenantDetail ``` {{#endtab }} {{#endtabs }} ### Enumeración de Entra ID y Privesc Por defecto, cualquier usuario debería tener **suficientes permisos para enumerar** cosas como usuarios, grupos, roles, principales de servicio... (ver [permisos predeterminados de AzureAD](az-basic-information/index.html#default-user-permissions)).\ Puedes encontrar aquí una guía: {{#ref}} az-services/az-azuread.md {{#endref}} Consulta las **herramientas de Post-Explotación** para encontrar herramientas que escalen privilegios en Entra ID como **AzureHound:** {{#ref}} az-enumeration-tools.md#automated-post-exploitation-tools {{#endref}} ### Enumeración de Azure Una vez que sepas quién eres, puedes comenzar a enumerar los **servicios de Azure a los que tienes acceso**. Deberías comenzar a averiguar los **permisos que tienes** sobre los recursos. Para esto: 1. **Encuentra el recurso al que tienes acceso**: El comando de Az PowerShell **`Get-AzResource`** te permite **saber los recursos sobre los que tu usuario actual tiene visibilidad**. Además, puedes obtener la misma información en la **consola web** yendo a [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) o buscando "Todos los recursos" o ejecutando: ```bash az rest --method GET --url "https://management.azure.com/subscriptions//resources?api-version=2021-04-01" ``` 2. **Encuentra los permisos que tienes sobre los recursos a los que tienes acceso y encuentra los roles asignados a ti**: Ten en cuenta que necesitas el permiso **`Microsoft.Authorization/roleAssignments/read`** para ejecutar esta acción. Además, con suficientes permisos, el rol **`Get-AzRoleAssignment`** se puede usar para **enumerar todos los roles** en la suscripción o el permiso sobre un recurso específico indicándolo así: ```bash Get-AzRoleAssignment -Scope /subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4 ``` También es posible obtener esta información ejecutando: ```bash az rest --method GET --uri "https://management.azure.com//providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value" ``` como en: ```bash az rest --method GET --uri "https://management.azure.com//subscriptions//resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value" ``` Otra opción es obtener los roles asignados a ti en azure con: ```bash az role assignment list --assignee "" --all --output table ``` O ejecutando lo siguiente (Si los resultados están vacíos, puede ser porque no tienes permiso para obtenerlos): ```bash az rest --method GET --uri 'https://management.azure.com/subscriptions//providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '' ``` 3. **Encuentra los permisos granulares de los roles asignados a ti**: Luego, para obtener el permiso granular, podrías ejecutar **`(Get-AzRoleDefinition -Id "").Actions`**. O llama a la API directamente con ```bash az rest --method GET --uri "https://management.azure.com//subscriptions//providers/Microsoft.Authorization/roleDefinitions/?api-version=2020-08-01-preview" | jq ".properties" ``` En la siguiente sección puedes encontrar **información sobre los servicios de Azure más comunes y cómo enumerarlos**: {{#ref}} az-services/ {{#endref}} ### Escalación de Privilegios, Post-Explotación y Persistencia Una vez que sepas cómo está estructurado el entorno de Azure y qué servicios se están utilizando, puedes comenzar a buscar formas de **escalar privilegios, moverte lateralmente, realizar otros ataques de post-explotación y mantener persistencia**. En la siguiente sección puedes encontrar información sobre cómo escalar privilegios en los servicios de Azure más comunes: {{#ref}} az-privilege-escalation/ {{#endref}} En la siguiente puedes encontrar información sobre cómo realizar ataques de post-explotación en los servicios de Azure más comunes: {{#ref}} az-post-exploitation/ {{#endref}} En la siguiente puedes encontrar información sobre cómo mantener persistencia en los servicios de Azure más comunes: {{#ref}} az-persistence/ {{#endref}} {{#include ../../banners/hacktricks-training.md}}