# Az - Service Bus Enum

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

## Service Bus

Azure Service Busは、アプリケーションの異なる部分や別々のアプリケーション間での信頼性のある**通信を可能にする**ために設計されたクラウドベースの**メッセージングサービス**です。これは、安全な仲介者として機能し、送信者と受信者が同時に操作していなくてもメッセージが安全に配信されることを保証します。システムを分離することで、アプリケーションは独立して動作しながらデータや指示を交換できます。これは、複数のワーカー間での負荷分散、信頼性のあるメッセージ配信、またはタスクを順番に処理したり、安全にアクセスを管理したりするなどの複雑な調整が必要なシナリオに特に役立ちます。

### Key Concepts

1. **Namespaces:** メッセージングシステムにおける名前空間は、メッセージングコンポーネント、キュー、トピックを整理し管理する論理的なコンテナです。アプリケーションがメッセージを送信、受信、処理できる隔離された環境を提供します。キューとトピックは、Service Bus名前空間内で同じインフラストラクチャと構成を共有しますが、相互に干渉することなく独立して動作します。
2. **Queues:** その目的は、受信者が準備ができるまでメッセージを保存することです。
- メッセージは順序付けられ、タイムスタンプが付けられ、耐久性のあるストレージに保存されます。
- 一つの消費者に対してプルモード（オンデマンド取得）で配信されます。
- メッセージが共有されると自動的に削除されるように構成することができるか、「Peek lock」モードで、消費者が削除できることを確認する必要があります。そうでない場合、メッセージはキューに戻ります。
- ポイントツーポイント通信をサポートします。
3. **Topics:** ブロードキャストのためのパブリッシュ-サブスクライブメッセージング。
- 複数の独立したサブスクリプションがメッセージのコピーを受け取ります。
- 各サブスクリプションはトピック内のキューのようなものです。
- サブスクリプションは、配信を制御したりメタデータを追加したりするためのルール/フィルターを持つことができます。

サービスバスのエンドポイント/接続文字列は：
```bash
https://<namespace>.servicebus.windows.net:443/
```
### 高度な機能

いくつかの高度な機能は次のとおりです：

- **メッセージセッション**: FIFO 処理を保証し、リクエスト-レスポンスパターンをサポートします。
- **自動転送**: 同じ名前空間内のキューまたはトピック間でメッセージを転送します。
- **デッドレター**: 配信できないメッセージをレビューのためにキャプチャします。
- **スケジュール配信**: 将来のタスクのためにメッセージ処理を遅延させます。
- **メッセージ延期**: 準備ができるまでメッセージの取得を延期します。
- **トランザクション**: 操作を原子的な実行にグループ化します。
- **フィルターとアクション**: メッセージをフィルタリングまたは注釈を付けるためのルールを適用します。
- **アイドル時の自動削除**: 非アクティブ状態の後にキューを削除します（最小: 5 分）。
- **重複検出**: 再送信中に重複メッセージを削除します。
- **バッチ削除**: 期限切れまたは不要なメッセージを一括削除します。

### ローカル認証

az cli パラメータの **`--disable-local-auth`** は、Service Bus 名前空間に対して **ローカル認証**（Shared Access Signature (SAS) キーの使用を許可する）が有効かどうかを制御するために使用されます。

- disable が **true** に設定されている場合: SAS キーを使用したローカル認証が無効になり、Entra ID 認証が許可されます。
- disable が **false (デフォルト)** に設定されている場合: SAS ローカル認証と Entra ID 認証の両方が利用可能で、SAS キーを使用して Service Bus リソースにアクセスするための接続文字列を使用できます。

### 認可ルール / SAS ポリシー

SAS ポリシーは、Azure Service Bus エンティティの名前空間（最も重要なもの）、キュー、およびトピックに対するアクセス権限を定義します。各ポリシーには次のコンポーネントがあります：

- **権限**: アクセスレベルを指定するためのチェックボックス：
- 管理: エンティティに対する完全な制御を付与し、構成や権限管理を含みます。
- 送信: エンティティにメッセージを送信することを許可します。
- リスン: エンティティからメッセージを受信することを許可します。
- **プライマリおよびセカンダリキー**: アクセス認証用の安全なトークンを生成するために使用される暗号化キーです。
- **プライマリおよびセカンダリ接続文字列**: エンドポイントとキーを含む事前構成された接続文字列で、アプリケーションでの使用が容易です。
- **SAS ポリシー ARM ID**: プログラムによる識別のためのポリシーへの Azure Resource Manager (ARM) パスです。

名前空間には、すべてのエンティティに影響を与える単一の SAS ポリシーがあることに注意することが重要です。一方、キューやトピックは、より細かい制御のために独自の SAS ポリシーを持つことができます。

### 列挙

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


### 権限昇格

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

### ポストエクスプロイト

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

## 参考文献

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