From eb158870296232c2c0faebdf264a86ad80193979 Mon Sep 17 00:00:00 2001 From: Translator Date: Fri, 10 Jan 2025 13:19:16 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation --- .../az-automation-accounts-privesc.md | 54 ++++++++++--- .../az-services/az-automation-accounts.md | 76 +++++++++++-------- 2 files changed, 88 insertions(+), 42 deletions(-) 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 dc7c939aa..071d2e339 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,11 +10,20 @@ Per ulteriori informazioni controlla: ../az-services/az-automation-accounts.md {{#endref}} +### Hybrid Workers + +Ricorda che se in qualche modo un attaccante può eseguire un runbook arbitrario (codice arbitrario) in un hybrid worker, egli **si sposterà verso la posizione della VM**. Questo potrebbe essere una macchina on-premise, una VPC di un cloud diverso o anche una VM di Azure. + +Inoltre, se l'hybrid worker è in esecuzione in Azure con altre Managed Identities collegate, il runbook sarà in grado di accedere all'**identità gestita del runbook e a tutte le identità gestite della VM dal servizio di metadata**. + +> [!TIP] +> Ricorda che il **servizio di metadata** ha un URL diverso (**`http://169.254.169.254`**) rispetto al servizio da cui ottenere il token delle identità gestite dell'account di automazione (**`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`) -In sintesi, questi permessi consentono di **creare, modificare ed eseguire Runbook** nell'Automation Account, che potresti utilizzare per **eseguire codice** nel contesto dell'Automation Account e aumentare i privilegi delle **Managed Identities** assegnate e rivelare **credenziali** e **variabili criptate** memorizzate nell'Automation Account. +In sintesi, queste autorizzazioni consentono di **creare, modificare ed eseguire Runbooks** nell'Automation Account che potresti utilizzare per **eseguire codice** nel contesto dell'Automation Account e aumentare i privilegi alle **Managed Identities** assegnate e rivelare **credenziali** e **variabili criptate** memorizzate nell'Automation Account. -Il permesso **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** consente di modificare il codice di un Runbook nell'Automation Account utilizzando: +L'autorizzazione **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** consente di modificare il codice di un Runbook nell'Automation Account utilizzando: ```bash # Update the runbook content with the provided PowerShell script az automation runbook replace-content --no-wait \ @@ -38,7 +47,11 @@ az automation runbook publish \ ``` Il permesso **`Microsoft.Automation/automationAccounts/jobs/write`** consente all'utente di eseguire un Runbook nell'Automation Account utilizzando: ```bash -az automation runbook start --automation-account-name --resource-group --name +az automation runbook start \ +--automation-account-name \ +--resource-group \ +--name \ +[--run-on ] ``` Il permesso **`Microsoft.Automation/automationAccounts/jobs/output/read`** consente all'utente di leggere l'output di un lavoro nell'Automation Account utilizzando: ```bash @@ -69,7 +82,7 @@ az rest --method PATCH \ Con il permesso **`Microsoft.Automation/automationAccounts/schedules/write`** è possibile creare un nuovo Programma nell'Account di Automazione che viene eseguito ogni 15 minuti (non molto furtivo) utilizzando il seguente comando. -Nota che l'**intervallo minimo per un programma è di 15 minuti**, e che il **tempo di inizio minimo è di 5 minuti** nel futuro. +Nota che l'**intervallo minimo per un programma è di 15 minuti**, e il **tempo di inizio minimo è di 5 minuti** nel futuro. ```bash ## For linux az automation schedule create \ @@ -91,7 +104,7 @@ az automation schedule create \ --frequency Minute \ --interval 15 ``` -Poi, con il permesso **`Microsoft.Automation/automationAccounts/jobSchedules/write`** è possibile assegnare un Scheduler a un runbook utilizzando: +Quindi, con il permesso **`Microsoft.Automation/automationAccounts/jobSchedules/write`** è possibile assegnare un Scheduler a un runbook utilizzando: ```bash az rest --method PUT \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//jobSchedules/b510808a-8fdc-4509-a115-12cfc3a2ad0d?api-version=2015-10-31" \ @@ -140,7 +153,7 @@ curl -X POST "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-aut ``` ### `Microsoft.Automation/automationAccounts/runbooks/draft/write` -Basta con il permesso `Microsoft.Automation/automationAccounts/runbooks/draft/write` per **aggiornare il codice di un Runbook** senza pubblicarlo e eseguirlo utilizzando i seguenti comandi. +Con solo il permesso `Microsoft.Automation/automationAccounts/runbooks/draft/write` è possibile **aggiornare il codice di un Runbook** senza pubblicarlo e eseguirlo utilizzando i seguenti comandi. ```bash # Update the runbook content with the provided PowerShell script az automation runbook replace-content --no-wait \ @@ -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`) -Questa autorizzazione consente all'utente di **configurare un controllo di origine** per l'Automation Account utilizzando comandi come i seguenti (questo utilizza Github come esempio): +Questa autorizzazione consente all'utente di **configurare un controllo sorgente** per l'Automation Account utilizzando comandi come i seguenti (questo utilizza Github come esempio): ```bash az automation source-control create \ --resource-group \ @@ -180,16 +194,32 @@ az automation source-control create \ --token-type PersonalAccessToken \ --access-token github_pat_11AEDCVZ ``` -Questo importerà automaticamente i runbook dal repository Github all'Automation Account e con alcuni altri permessi per iniziare a eseguirli sarebbe **possibile escalare i privilegi**. +Questo importerà automaticamente i runbook dal repository Github nell'Automation Account e con alcuni altri permessi per iniziare a eseguirli sarebbe **possibile escalare i privilegi**. -Inoltre, ricorda che per lavorare con il controllo delle sorgenti negli Automation Accounts deve avere un'identità gestita con il ruolo **`Contributor`** e se è un'identità gestita dall'utente, questa può essere configurata anche impostando nella variabile **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** il **client id** dell'identità gestita dall'utente da utilizzare. +Inoltre, ricorda che per il controllo della sorgente per funzionare negli Automation Accounts deve avere un'identità gestita con il ruolo **`Contributor`** e se è un'identità gestita dall'utente, l'ID client della MI deve essere specificato nella variabile **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**. > [!TIP] > Nota che non è possibile cambiare l'URL del repo di un controllo sorgente una volta creato. -### Ambienti di Esecuzione Personalizzati +### `Microsoft.Automation/automationAccounts/variables/write` -Se un account di automazione utilizza un ambiente di esecuzione personalizzato, potrebbe essere possibile sovrascrivere un pacchetto personalizzato dell'ambiente di esecuzione con del codice malevolo (come **una backdoor**). In questo modo, ogni volta che un runbook che utilizza quell'ambiente di esecuzione personalizzato viene eseguito e carica il pacchetto personalizzato, il codice malevolo verrà eseguito. +Con il permesso **`Microsoft.Automation/automationAccounts/variables/write`** è possibile scrivere variabili nell'Automation Account utilizzando il seguente 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 +} +}' +``` +### Ambienti di Runtime Personalizzati + +Se un account di automazione utilizza un ambiente di runtime personalizzato, potrebbe essere possibile sovrascrivere un pacchetto personalizzato del runtime con del codice malevolo (come **una backdoor**). In questo modo, ogni volta che un runbook che utilizza quel runtime personalizzato viene eseguito e carica il pacchetto personalizzato, il codice malevolo verrà eseguito. ### Compromissione della Configurazione di Stato @@ -203,7 +233,7 @@ Se un account di automazione utilizza un ambiente di esecuzione personalizzato, **Personalizzazione:** Le variabili e i parametri in questi file devono essere adattati all'ambiente specifico dell'utente, inclusi nomi delle risorse, percorsi dei file e identificatori di server/payload. -- Passo 2 — Zip del File di Configurazione +- Passo 2 — Comprimere il File di Configurazione Il `reverse_shell_config.ps1` viene compresso in un file `.zip`, rendendolo pronto per il trasferimento all'Azure Storage Account. ```powershell 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 76449255a..d92ae48b9 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 @@ -2,55 +2,55 @@ {{#include ../../../../banners/hacktricks-training.md}} -## Informazioni di base +## Informazioni di Base -Gli Azure Automation Accounts sono servizi basati su cloud in Microsoft Azure che aiutano a **automatizzare i compiti** come la gestione delle risorse, la configurazione e gli aggiornamenti in ambienti Azure e on-premises. Forniscono **Runbooks** (script per l'automazione che vengono eseguiti), **programmazioni** e **gruppi di lavoratori ibridi** per eseguire **lavori** di automazione, abilitando l'infrastruttura come codice (IaC) e l'automazione dei processi per migliorare l'efficienza e la coerenza nella gestione delle risorse cloud. +Gli Azure Automation Accounts sono servizi basati sul cloud in Microsoft Azure che aiutano a **automatizzare i compiti** come la gestione delle risorse, la configurazione e gli aggiornamenti attraverso Azure e ambienti on-premises. Forniscono **Runbooks** (script per l'automazione che vengono eseguiti), **programmazioni** e **gruppi di lavoratori ibridi** per eseguire **lavori di automazione**, abilitando l'infrastruttura come codice (IaC) e l'automazione dei processi per migliorare l'efficienza e la coerenza nella gestione delle risorse cloud. ### Impostazioni -- **Credenziali**: La password è accessibile solo all'interno di un runbook all'interno dell'account di automazione, vengono utilizzate per **memorizzare in modo sicuro nomi utente e password**. -- **Variabili**: Utilizzate per memorizzare **dati di configurazione** che possono essere utilizzati nei runbook. Questo potrebbe includere anche informazioni sensibili come le chiavi API. Se la variabile è **memorizzata crittografata**, è disponibile solo all'interno di un runbook all'interno dell'account di automazione. -- **Certificati**: Utilizzati per memorizzare **certificati** che possono essere utilizzati nei runbook. +- **Credenziali**: La password è accessibile solo all'interno di un runbook all'interno dell'account di automazione, e viene utilizzata per **memorizzare in modo sicuro nomi utente e password**. +- **Variabili**: Utilizzate per memorizzare **dati di configurazione** che possono essere utilizzati nei runbooks. Questo potrebbe includere anche informazioni sensibili come le chiavi API. Se la variabile è **memorizzata crittografata**, è disponibile solo all'interno di un runbook nell'account di automazione. +- **Certificati**: Utilizzati per memorizzare **certificati** che possono essere utilizzati nei runbooks. - **Connessioni**: Utilizzate per memorizzare **informazioni di connessione** a servizi esterni. Questo potrebbe contenere **informazioni sensibili**. -- **Accesso alla rete**: Può essere impostato su **pubblico** o **privato**. +- **Accesso alla Rete**: Può essere impostato su **pubblico** o **privato**. -## Runbooks e Lavori +## Runbooks & Lavori -Un Runbook in Azure Automation è uno **script che esegue automaticamente compiti** all'interno del tuo ambiente cloud. I runbook possono essere scritti in PowerShell, Python o editor grafici. Aiutano ad automatizzare compiti amministrativi come la gestione delle VM, la patching o i controlli di conformità. +Un Runbook in Azure Automation è uno **script che esegue automaticamente compiti** all'interno del tuo ambiente cloud. I runbooks possono essere scritti in PowerShell, Python o editor grafici. Aiutano ad automatizzare compiti amministrativi come la gestione delle VM, la patching o i controlli di conformità. Nel **codice** situato all'interno dei **Runbooks** potrebbe contenere **informazioni sensibili** (come credenziali). -Vai su `Automation Accounts` --> `` --> `Runbooks/Lavori/Grandi lavoratori ibridi/Compiti di osservazione/credenziali/variabili/certificati/connessioni` -Un **Lavoro è un'istanza di esecuzione di un Runbook**. Quando esegui un Runbook, viene creato un Lavoro per tenere traccia di quell'esecuzione. Ogni lavoro include: +Un **Lavoro è un'istanza di esecuzione di un Runbook**. Quando esegui un Runbook, viene creato un Lavoro per tracciare quell'esecuzione. Ogni lavoro include: - **Stato**: In coda, In esecuzione, Completato, Fallito, Sospeso. - **Output**: Il risultato dell'esecuzione del Runbook. -- **Orario di inizio e fine**: Quando il lavoro è iniziato e completato. +- **Orario di Inizio e Fine**: Quando il lavoro è iniziato e completato. -Un lavoro contiene l'**output** dell'**esecuzione** del **Runbook**. Se puoi **leggere** i **lavori**, fallo poiché **contengono** l'**output** dell'esecuzione (potenziali **informazioni sensibili**). +Un lavoro contiene l'**output** dell'**esecuzione del Runbook**. Se puoi **leggere** i **lavori**, fallo poiché **contengono** l'**output** dell'esecuzione (potenziali **informazioni sensibili**). -### Programmazioni e Webhook +### Programmazioni & Webhook Ci sono 3 modi principali per eseguire un Runbook: -- **Programmazioni**: Queste vengono utilizzate per **attivare** i Runbooks a un **orario specifico** o a **intervalli**. +- **Programmazioni**: Queste vengono utilizzate per **attivare** i Runbooks a un **orario specifico** o **intervallo**. - **Webhook**: Questi sono **endpoint HTTP** che possono essere utilizzati per **attivare** i Runbooks da **servizi esterni**. Nota che l'URL del webhook **non è visibile** dopo la creazione. -- **Attivazione manuale**: Puoi **attivare manualmente** un Runbook dal Portale Azure e dalla CLI. +- **Attivazione Manuale**: Puoi **attivare manualmente** un Runbook dal Portale Azure e dalla CLI. -### Controllo del codice sorgente +### Controllo del Codice Sorgente Consente di importare Runbooks da **Github, Azure Devops (Git) e Azure Devops (TFVC)**. È possibile indicare di pubblicare i Runbooks del repository nell'account di automazione Azure ed è anche possibile indicare di **sincronizzare le modifiche dal repository** all'account di automazione Azure. Quando la sincronizzazione è abilitata, nel **repository Github viene creato un webhook** per attivare la sincronizzazione ogni volta che si verifica un evento di push. Esempio di un URL webhook: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d` -Nota che questi webhook **non saranno visibili** quando si elencano i webhook nei runbooks associati al repository Github. Nota anche che **non è possibile cambiare l'URL del repository** di un controllo del codice sorgente una volta creato. +Nota che questi webhook **non saranno visibili** quando si elencano i webhook nei runbooks associati al repository Github. Inoltre, nota che **non è possibile cambiare l'URL del repository** di un controllo sorgente una volta creato. -Affinché il controllo del codice sorgente configurato funzioni, l'**Azure Automation Account** deve avere un'identità gestita (di sistema o utente) con il ruolo di **`Contributor`**. Inoltre, per assegnare un'identità gestita da utente all'Automation Account, è possibile farlo impostando la variabile **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** sull'**ID client dell'identità gestita da utente**. +Affinché il controllo sorgente configurato funzioni, l'**Azure Automation Account** deve avere un'identità gestita (di sistema o utente) con il ruolo di **`Contributor`**. Inoltre, per assegnare un'identità gestita utente all'Automation Account, è necessario indicare l'ID client dell'utente MI nella variabile **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**. -### Ambienti di esecuzione +### Ambienti di Esecuzione -Quando si crea un Runbook è possibile selezionare l'ambiente di esecuzione. Per impostazione predefinita, sono disponibili i seguenti ambienti di esecuzione: +Quando si crea un Runbook è possibile selezionare l'ambiente di esecuzione. Per impostazione predefinita, i seguenti ambienti di esecuzione sono disponibili: - **Powershell 5.1** - **Powershell 7.1** @@ -59,23 +59,30 @@ Quando si crea un Runbook è possibile selezionare l'ambiente di esecuzione. Per - **Python 3.8** - **Python 2.7** -Tuttavia, è anche possibile **creare i propri ambienti**, utilizzando uno di questi come base. Nel caso di Python, è possibile caricare pacchetti `.whl` nell'ambiente che verrà utilizzato. Nel caso di PowerShell, è possibile caricare pacchetti `.zip` con i moduli da avere nell'esecuzione. +Tuttavia, è anche possibile **creare i propri ambienti**, utilizzando uno di questi come base. Nel caso di Python, è possibile caricare pacchetti `.whl` nell'ambiente che verranno utilizzati. Nel caso di PowerShell, è possibile caricare pacchetti `.zip` con i moduli da avere nell'esecuzione. -### Lavoratore Ibrido +### Gruppi di Lavoratori Ibridi -Un Runbook può essere eseguito in un **contenitore all'interno di Azure** o in un **Lavoratore Ibrido** (macchina non Azure).\ -L'**Agente di Log Analytics** è distribuito sulla VM per registrarla come lavoratore ibrido.\ -I lavori del lavoratore ibrido vengono eseguiti come **SYSTEM** su Windows e come account **nxautomation** su Linux.\ -Ogni Lavoratore Ibrido è registrato in un **Gruppo di Lavoratori Ibridi**. +In Azure Automation, l'ambiente di esecuzione predefinito per i runbooks è il **Azure Sandbox**, una piattaforma basata sul cloud gestita da Azure, adatta per compiti che coinvolgono risorse Azure. Tuttavia, questo sandbox ha limitazioni, come l'accesso ristretto alle risorse on-premises e vincoli sul tempo di esecuzione e sull'uso delle risorse. Per superare queste limitazioni, vengono impiegati i Gruppi di Lavoratori Ibridi. Un Gruppo di Lavoratori Ibridi è composto da **uno o più Hybrid Runbook Workers installati sulle proprie macchine**, sia on-premises, in altri ambienti cloud o VM Azure. Questa configurazione consente ai runbooks di eseguire direttamente su queste macchine, fornendo accesso diretto alle risorse locali, la possibilità di eseguire compiti più lunghi e intensivi in termini di risorse, e la flessibilità di interagire con ambienti al di là della portata immediata di Azure. -Pertanto, se puoi scegliere di eseguire un **Runbook** in un **Lavoratore Ibrido Windows**, eseguirai **comandi arbitrari** all'interno di una macchina esterna come **System** (ottima tecnica di pivot). +Quando viene creato un gruppo di lavoratori ibridi, è necessario indicare le **credenziali** da utilizzare. Ci sono 2 opzioni: -### Configurazione dello stato (SC) +- **Credenziali predefinite**: Non è necessario fornire le credenziali e i runbooks verranno eseguiti all'interno delle VM come **Sistema**. +- **Credenziali specifiche**: È necessario fornire il nome dell'oggetto credenziali all'interno dell'account di automazione, che verrà utilizzato per eseguire i **runbooks all'interno delle VM**. Pertanto, in questo caso, potrebbe essere possibile **rubare credenziali valide** per le VM. + +Pertanto, se puoi scegliere di eseguire un **Runbook** in un **Windows Hybrid Worker**, eseguirai **comandi arbitrari** all'interno di una macchina esterna come **Sistema** (ottima tecnica di pivot). + +Inoltre, se il lavoratore ibrido è in esecuzione in Azure con altre identità gestite collegate, il runbook sarà in grado di accedere all'**identità gestita del runbook e a tutte le identità gestite della VM dal servizio di metadata**. + +> [!TIP] +> Ricorda che il **servizio di metadata** ha un URL diverso (**`http://169.254.169.254`**) rispetto al servizio da cui ottenere il token delle identità gestite dell'account di automazione (**`IDENTITY_ENDPOINT`**). + +### Configurazione dello Stato (SC) >[!WARNING] -> Come indicato nella [documentazione](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), la Configurazione dello Stato di Azure Automation sarà ritirata il 30 settembre 2027 e sostituita da [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview). +> Come indicato in [the docs](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), Azure Automation State Configuration sarà ritirato il 30 settembre 2027 e sostituito da [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview). -Gli Automation Accounts supportano anche la **Configurazione dello Stato (SC)**, che è una funzionalità che aiuta a **configurare** e **mantenere** lo **stato** delle tue VM. È possibile **creare** e **applicare** configurazioni DSC a macchine **Windows** e **Linux**. +Gli Automation Accounts supportano anche la **Configurazione dello Stato (SC)**, che è una funzionalità che aiuta a **configurare** e **mantenere** lo **stato** delle tue VM. È possibile **creare** e **applicare** configurazioni DSC a **macchine Windows** e **Linux**. Dal punto di vista di un attaccante, questo era interessante perché consentiva di **eseguire codice PS arbitrario in tutte le VM configurate**, consentendo di elevare i privilegi alle identità gestite di queste VM, potenzialmente pivotando verso nuove reti... Inoltre, le configurazioni potrebbero contenere **informazioni sensibili**. @@ -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