# Az - Service Bus Enum

{{#include ../../../banners/hacktricks-training.md}}

## Service Bus

Azure Service Bus è un **servizio di messaggistica** basato su cloud progettato per abilitare una **comunicazione affidabile tra diverse parti di un'applicazione o applicazioni separate**. Funziona come un intermediario sicuro, garantendo che i messaggi vengano consegnati in modo sicuro, anche se il mittente e il destinatario non operano simultaneamente. Decoupling dei sistemi consente alle applicazioni di lavorare in modo indipendente pur continuando a scambiare dati o istruzioni. È particolarmente utile per scenari che richiedono bilanciamento del carico tra più lavoratori, consegna affidabile dei messaggi o coordinamento complesso, come l'elaborazione di compiti in ordine o la gestione sicura dell'accesso.

### Concetti Chiave

1. **Namespaces:** Un namespace nei sistemi di messaggistica è un contenitore logico che organizza e gestisce componenti di messaggistica, code e argomenti. Fornisce un ambiente isolato in cui le applicazioni possono inviare, ricevere e elaborare messaggi. Le code e gli argomenti condividono la stessa infrastruttura e configurazione all'interno di un namespace di Service Bus, ma operano in modo indipendente senza interagire tra loro.
2. **Queues:** il suo scopo è memorizzare i messaggi fino a quando il destinatario è pronto.
- I messaggi sono ordinati, timestampati e memorizzati in modo durevole.
- Consegnati in modalità pull (recupero su richiesta) a un consumatore.
- Può essere configurato in modo che quando il messaggio viene condiviso venga automaticamente eliminato o in modalità "Peek lock" in cui il consumatore deve riconoscere che può essere eliminato. In caso contrario, il messaggio tornerà nella coda.
- Supporta la comunicazione punto a punto.
3. **Topics:** Messaggistica publish-subscribe per la trasmissione.
- Più sottoscrizioni indipendenti ricevono copie dei messaggi.
- Ogni sottoscrizione è come una coda all'interno dell'argomento.
- Le sottoscrizioni possono avere regole/filtri per controllare la consegna o aggiungere metadati.

La stringa di connessione/endpoint del service bus è:
```bash
https://<namespace>.servicebus.windows.net:443/
```
### Funzioni Avanzate

Alcune funzioni avanzate sono:

- **Message Sessions**: Garantisce l'elaborazione FIFO e supporta modelli di richiesta-risposta.
- **Auto-Forwarding**: Trasferisce messaggi tra code o argomenti nello stesso namespace.
- **Dead-Lettering**: Cattura messaggi non consegnabili per la revisione.
- **Scheduled Delivery**: Ritarda l'elaborazione dei messaggi per compiti futuri.
- **Message Deferral**: Rimanda il recupero dei messaggi fino a quando non è pronto.
- **Transactions**: Raggruppa operazioni in esecuzione atomica.
- **Filters & Actions**: Applica regole per filtrare o annotare messaggi.
- **Auto-Delete on Idle**: Elimina le code dopo inattività (min: 5 minuti).
- **Duplicate Detection**: Rimuove messaggi duplicati durante i reinvii.
- **Batch Deletion**: Elimina in blocco messaggi scaduti o non necessari.

### Autenticazione Locale

Il parametro **`--disable-local-auth`** di az cli viene utilizzato per controllare se l'**autenticazione locale** (che consente l'uso di chiavi Shared Access Signature (SAS)) è abilitata per il tuo namespace di Service Bus.

- Quando disable è impostato su **true**: L'autenticazione locale utilizzando le chiavi SAS è disabilitata e l'autenticazione con Entrad ID è consentita.
- Quando disable è impostato su **false (predefinito)**: Sia l'autenticazione locale SAS che l'autenticazione con Entra ID sono disponibili e puoi utilizzare le stringhe di connessione con le chiavi SAS per accedere alle risorse del tuo Service Bus.

### Regola di Autorizzazione / Politica SAS

Le Politiche SAS definiscono i permessi di accesso per le entità del namespace di Azure Service Bus (la più importante), code e argomenti. Ogni politica ha i seguenti componenti:

- **Permissions**: Caselle di controllo per specificare i livelli di accesso:
- Manage: Concede il pieno controllo sull'entità, inclusa la gestione della configurazione e dei permessi.
- Send: Consente l'invio di messaggi all'entità.
- Listen: Consente di ricevere messaggi dall'entità.
- **Primary and Secondary Keys**: Queste sono chiavi crittografiche utilizzate per generare token sicuri per autenticare l'accesso.
- **Primary and Secondary Connection Strings**: Stringhe di connessione preconfigurate che includono l'endpoint e la chiave per un uso facile nelle applicazioni.
- **SAS Policy ARM ID**: Il percorso di Azure Resource Manager (ARM) per la politica per identificazione programmatica.

È importante notare che un namespace ha una singola politica SAS che influisce su ogni entità al suo interno, mentre code e argomenti possono avere le proprie politiche SAS individuali per un controllo più granulare.

### Enumerazione

{{#tabs }}
{{#tab name="az cli" }}
```bash
# Namespace Enumeration
az servicebus namespace list
az servicebus namespace network-rule-set list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
az servicebus namespace show --resource-group <MyResourceGroup> --name <MyNamespace>
az servicebus namespace network-rule-set show --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
az servicebus namespace private-endpoint-connection list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
az servicebus namespace exists --name ProposedNamespace

# Authorization Rule Enumeration
az servicebus namespace authorization-rule list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
az servicebus queue authorization-rule list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --queue-name <MyQueue>
az servicebus topic authorization-rule list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --topic-name <MyTopic>
az servicebus namespace authorization-rule keys list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --name <MyAuthRule>

# Get keys
az servicebus namespace authorization-rule keys list --resource-group <res-group> --namespace-name <namespace-name> [--authorization-rule-name RootManageSharedAccessKey]
az servicebus topic authorization-rule keys list --resource-group <res-group> --namespace-name <namespace-name> --topic-name <topic-name> --name <auth-rule-name>
az servicebus queue authorization-rule keys list --resource-group <res-group> --namespace-name <namespace-name> --queue-name <topic-name> --name <auth-rule-name>

# Queue Enumeration
az servicebus queue list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
az servicebus queue show --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --name <MyQueue>

# Topic Enumeration
az servicebus topic list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
az servicebus topic show --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --name <MyTopic>

# Susbscription Enumeration
az servicebus topic subscription list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --topic-name <MyTopic>
az servicebus topic subscription show --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --topic-name <MyTopic> --name <MySubscription>
```
{{#endtab }}

{{#tab name="Az Powershell" }}
```powershell
Get-Command -Module Az.ServiceBus

# Retrieves details of a Service Bus namespace, including V2-specific features like additional metrics or configurations.
Get-AzServiceBusNamespaceV2 -ResourceGroupName <ResourceGroupName> -Name <NamespaceName>

# Retrieves the authorization rules for a Service Bus namespace, queue, or topic.
Get-AzServiceBusAuthorizationRule -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>

# Retrieves the Geo-Disaster Recovery configuration for a Service Bus namespace, if it is enabled.
Get-AzServiceBusGeoDRConfiguration -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>

# Retrieves the shared access keys for a specified authorization rule in a Service Bus namespace.
Get-AzServiceBusKey -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -Name <RuleName>

# Retrieves the migration state and details for a Service Bus namespace, if a migration is in progress.
Get-AzServiceBusMigration -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>

# Retrieves properties and details about a Service Bus namespace.
Get-AzServiceBusNamespace -ResourceGroupName <ResourceGroupName> -Name <NamespaceName>

# Retrieves the network rule set for a Service Bus namespace, such as IP restrictions or virtual network access rules.
Get-AzServiceBusNetworkRuleSet -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>

# Retrieves private endpoint connections for a Service Bus namespace.
Get-AzServiceBusPrivateEndpointConnection -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>

# Retrieves private link resources associated with a Service Bus namespace.
Get-AzServiceBusPrivateLink -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>

# Retrieves details of a specified queue in a Service Bus namespace.
Get-AzServiceBusQueue -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -Name <QueueName>

# Retrieves rules (filters and actions) for a subscription under a Service Bus topic.
Get-AzServiceBusRule -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -TopicName <TopicName> -SubscriptionName <SubscriptionName>

# Retrieves details of subscriptions for a specified Service Bus topic.
Get-AzServiceBusSubscription -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -TopicName <TopicName>

# Retrieves details of a specified topic in a Service Bus namespace.
Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
```
{{#endtab }}
{{#endtabs }}


### Escalation dei privilegi

{{#ref}}
../az-privilege-escalation/az-servicebus-privesc.md
{{#endref}}

### Post Exploitation

{{#ref}}
../az-post-exploitation/az-servicebus-post-exploitation.md
{{#endref}}

## Riferimenti

- [https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0](https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview)
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli)

{{#include ../../../banners/hacktricks-training.md}}
