Files
hacktricks-cloud/src/pentesting-cloud/azure-security/README.md

11 KiB

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
  • Comprar credenciales a un empleado
  • Phishing Común (credenciales o aplicación Oauth)
  • Phishing de Autenticación con Código de Dispositivo
  • Terceros comprometidos
  • Vulnerabilidades en Aplicaciones Alojadas en Azure
  • Server Side Request Forgery con acceso al endpoint de metadatos
  • Tomas de subdominio como en https://godiego.co/posts/STO-Azure/
  • Otras configuraciones incorrectas de servicios de Azure
  • Si alguna laptop de desarrollador está comprometida (WinPEAS y LinPEAS pueden encontrar esta información):
  • Dentro de <HOME>/.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\<username>\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\<username>\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.

Una de las primeras cosas que necesitas saber es quién eres (en qué entorno estás):

{{#tabs }} {{#tab name="az cli" }}

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" }}

# 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" }}

#Get the current session
Get-MgContext

{{#endtab }}

{{#tab name="AzureAD" }}

#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).
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 o buscando "Todos los recursos" o ejecutando:

az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
  1. 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í:

Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4

También es posible obtener esta información ejecutando:

az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2020-08-01-preview" | jq ".value"

como en:

az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/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:

az role assignment list --assignee "<email>" --all --output table

O ejecutando lo siguiente (Si los resultados están vacíos, puede ser porque no tienes permiso para obtenerlos):

az rest --method GET --uri 'https://management.azure.com/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '<user-id>'
  1. Encuentra los permisos granulares de los roles asignados a ti:

Luego, para obtener el permiso granular, podrías ejecutar (Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions.

O llama a la API directamente con

az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?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}}