diff --git a/src/pentesting-cloud/azure-security/az-services/az-storage.md b/src/pentesting-cloud/azure-security/az-services/az-storage.md index 1cbbffeae..0c65e5a7c 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-storage.md +++ b/src/pentesting-cloud/azure-security/az-services/az-storage.md @@ -2,54 +2,54 @@ {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## 基本情報 -Azure Storage Accounts は、Microsoft Azure の基盤サービスで、blobs (binary large objects)、files、queues、tables を含む、さまざまな data types 向けにスケーラブルで secure、かつ highly available な cloud **storage** を提供します。これらは、異なる storage services を 1 つの namespace にまとめ、管理を容易にする container として機能します。 +Azure Storage Accounts は Microsoft Azure の基本サービスで、**さまざまなデータ型のためのスケーラブルで安全、高可用な cloud ストレージ** を提供します。これには blobs (binary large objects)、files、queues、tables が含まれます。これらはコンテナとして機能し、異なる storage services を単一の namespace の下にまとめて、管理しやすくします。 -**Main configuration options**: +**主な設定オプション**: -- すべての storage account は、Azure 全体で一意の **uniq name** を持つ必要があります。 +- すべての storage account は、Azure 全体で **一意の名前** である必要があります。 - すべての storage account は **region** または Azure extended zone にデプロイされます -- より良い performance のために storage account の **premium** version を選択できます -- rack、drive、datacenter の **failures** に対する保護のために、**4 types of redundancy** から選択できます。 +- より高いパフォーマンスのために storage account の **premium** 版を選択できます +- rack、drive、datacenter の **failure** に対して保護するため、**4種類の redundancy** から選択できます。 -**Security configuration options**: +**セキュリティ設定オプション**: - **Require secure transfer for REST API operations**: storage との通信で TLS を必須にする -- **Allows enabling anonymous access on individual containers**: これを有効にしないと、将来 anonymous access を有効にできません -- **Enable storage account key access**: これを有効にしないと、Shared Keys でのアクセスは forbidden になります +- **Allows enabling anonymous access on individual containers**: 無効の場合、将来的に anonymous access を有効化できなくなります +- **Enable storage account key access**: 無効の場合、Shared Keys を使ったアクセスは禁止されます - **Minimum TLS version** -- **Permitted scope for copy operations**: 任意の storage account から、同じ Entra tenant 内の任意の storage account から、または同じ virtual network 内の private endpoints を持つ storage account からのコピーを許可します。 +- **Permitted scope for copy operations**: 任意の storage account から、同じ Entra tenant の任意の storage account から、または同じ virtual network 内の private endpoints を持つ storage account からのコピーを許可する -**Blob Storage options**: +**Blob Storage オプション**: - **Allow cross-tenant replication** -- **Access tier**: Hot (頻繁にアクセスされる data)、Cool、Cold (まれにアクセスされる data) +- **Access tier**: Hot (頻繁にアクセスされる data)、Cool、Cold (ほとんどアクセスされない data) -**Networking options**: +**ネットワーク設定オプション**: - **Network access**: - すべての networks から許可 -- 選択された virtual networks と IP addresses から許可 -- public access を無効にして private access を使用 -- **Private endpoints**: virtual network から storage account への private connection を許可します +- 選択した virtual networks と IP addresses から許可 +- public access を無効化し private access を使用 +- **Private endpoints**: virtual network から storage account への private 接続を許可します -**Data protection options**: +**Data protection オプション**: -- **Point-in-time restore for containers**: containers を以前の state に restore できます -- これには versioning、change feed、blob soft delete を有効にする必要があります。 -- **Enable soft delete for blobs**: deleted blobs (上書きされたものも含む) に対して、日数単位の retention period を有効にします -- **Enable soft delete for containers**: deleted containers に対して、日数単位の retention period を有効にします -- **Enable soft delete for file shares**: deleted file shared に対して、日数単位の retention period を有効にします -- **Enable versioning for blobs**: blobs の previous versions を保持します -- **Enable blob change feed**: blobs への create、modification、delete の変更ログを保持します -- **Enable version-level immutability support**: account-level で time-based retention policy を設定でき、それがすべての blob versions に適用されます。 -- Version-level immutability support と point-in-time restore for containers は同時に有効にできません。 +- **Point-in-time restore for containers**: containers を以前の状態に復元できます +- これには versioning、change feed、blob soft delete の有効化が必要です。 +- **Enable soft delete for blobs**: 削除された blobs(上書きされたものも含む)に対して、日数単位の retention period を有効にします +- **Enable soft delete for containers**: 削除された containers に対して、日数単位の retention period を有効にします +- **Enable soft delete for file shares**: 削除された file shared に対して、日数単位の retention period を有効にします +- **Enable versioning for blobs**: blobs の以前の versions を保持します +- **Enable blob change feed**: blobs に対する作成、変更、削除の変更ログを保持します +- **Enable version-level immutability support**: account-level で time-based retention policy を設定でき、すべての blob versions に適用されます。 +- version-level immutability support と point-in-time restore for containers は同時に有効化できません。 -**Encryption configuration options**: +**Encryption 設定オプション**: - **Encryption type**: Microsoft-managed keys (MMK) または Customer-managed keys (CMK) を使用できます -- **Enable infrastructure encryption**: data を "for more security" のために二重に encrypt できます +- **Enable infrastructure encryption**: data を "for more security" のために二重に暗号化できます ### Storage endpoints @@ -66,16 +66,16 @@ Azure Storage Accounts は、Microsoft Azure の基盤サービスで、blobs (b If "Allow Blob public access" is **enabled** (disabled by default), when creating a container it's possible to: -- **public access** を与えて blobs を read できるようにする (name を知っている必要があります)。 -- container blobs を **List** して、**read** する。 +- **blobs を読むための public access** を付与する(name を知っている必要があります)。 +- **container の blobs を一覧表示** して **読む**。 - 完全に **private** にする
### Static website (`$web`) exposure & leaked secrets -- **Static websites** は、`https://.z13.web.core.windows.net/` のような region-specific endpoint 経由で特別な `$web` container から配信されます。 -- `$web` container は blob API で `publicAccess: null` を返すことがありますが、ファイルは static site endpoint 経由で引き続き到達可能なため、そこに config/IaC artifacts を置くと secrets が leak する可能性があります。 +- **Static websites** are served from the special `$web` container over a region-specific endpoint such as `https://.z13.web.core.windows.net/`. +- The `$web` container may report `publicAccess: null` via the blob API, but files are still reachable through the static site endpoint, so dropping config/IaC artifacts there can leak secrets. - Quick audit workflow: ```bash # Identify storage accounts with static website hosting enabled @@ -89,51 +89,51 @@ az storage blob download -c '$web' --name iac/terraform.tfvars --file /dev/stdou ``` ### 匿名 blob exposure の監査 -- データを expose できる **storage accounts を特定**します: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`. `allowBlobPublicAccess` が `false` の場合、containers を public にできません。 -- **リスクのある accounts を確認**して、flag と他の弱い設定を確かめます: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`. -- flag が有効な場合の **container-level exposure を列挙**します: +- データを公開しうる **storage accounts を特定** する: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`。`allowBlobPublicAccess` が `false` の場合、containers を public にできません。 +- **リスクのある accounts を確認** して、フラグと他の弱い設定を検証する: `az storage account show --name --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`. +- フラグが有効な場合の **container-level exposure を列挙** する: ```bash az storage container list --account-name \ --query '[].{name:name, access:properties.publicAccess}' ``` -- `"Blob"`: 匿名 read は **blob name が分かっている場合のみ** 許可される(listing は不可)。 -- `"Container"`: 匿名ですべての blob の **list + read** が可能。 -- `null`: private; authentication required. -- **credentials なしで access を prove**: +- `"Blob"`: 匿名 read は **blob 名が既知の場合のみ** 許可される(listing は不可)。 +- `"Container"`: すべての blob の匿名 **list + read**。 +- `null`: private; authentication が必要。 +- 認証情報なしで **access を証明**する: - `publicAccess` が `Container` の場合、匿名 listing が動作する: `curl "https://.blob.core.windows.net/?restype=container&comp=list"`. -- `Blob` と `Container` の両方で、name が分かっていれば匿名 blob download が動作する: +- `Blob` と `Container` の両方で、name が既知なら匿名 blob download が動作する: ```bash az storage blob download -c -n --account-name --file /dev/stdout # or via raw HTTP curl "https://.blob.core.windows.net//" ``` -### Storage への接続 +### Storageへの接続 -接続できる **storage** が見つかった場合、[**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) ツールを使って接続できます。 +接続可能な **storage** を見つけた場合、ツール [**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) を使って接続できます。 -## Storage へのアクセス +## Storageへのアクセス ### RBAC -**RBAC roles** を使って Entra ID principals から storage accounts にアクセスすることが可能で、これが推奨方法です。 +**RBAC roles** を使って Entra ID principals で storage accounts にアクセスすることが可能で、これが推奨される方法です。 ### Access Keys -storage accounts には access keys があり、それを使ってアクセスできます。これにより storage account への**完全なアクセス**が可能になります。 +storage accounts には access keys があり、それを使ってアクセスできます。これにより **storage account へのフルアクセス** が可能になります。
### **Shared Keys & Lite Shared Keys** -[**Shared Keys を生成する**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key)ことが可能で、access keys で署名されたものを使って、signed URL 経由で特定の resources へのアクセスを認可できます。 +[**Shared Keys を生成する**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) ことが可能で、access keys で署名されており、signed URL を通じて特定の resources へのアクセスを認可します。 > [!NOTE] -> `CanonicalizedResource` 部分は storage services resource (URI) を表します。URL のどこかがエンコードされている場合は、`CanonicalizedResource` 内でも同様にエンコードされている必要があります。 +> `CanonicalizedResource` の部分は storage services resource (URI) を表します。URL のどこかがエンコードされている場合は、`CanonicalizedResource` 内でも同じようにエンコードされている必要があります。 > [!NOTE] -> これは requests の認証に **`az` cli でデフォルト使用** されます。Entra ID principal の credentials を使わせるには、`--auth-mode login` パラメータを指定します。 +> これは requests を認証するために **`az` cli によってデフォルトで使用されます**。Entra ID principal credentials を使わせるには、param `--auth-mode login` を指定します。 -- 以下の情報に署名することで、**blob, queue and file services 用の shared key** を生成できます: +- 次の情報に署名することで、**blob, queue and file services 用の shared key** を生成することが可能です: ```bash StringToSign = VERB + "\n" + Content-Encoding + "\n" + @@ -150,7 +150,7 @@ Range + "\n" + CanonicalizedHeaders + CanonicalizedResource; ``` -- 次の情報に署名することで、**table services** 用の **shared key** を生成できます: +- 次の情報に署名することで、**table services 用の共有キー**を生成することが可能です: ```bash StringToSign = VERB + "\n" + Content-MD5 + "\n" + @@ -158,7 +158,7 @@ Content-Type + "\n" + Date + "\n" + CanonicalizedResource; ``` -- 次の情報に署名して、**blob、queue、file services 用の lite shared key** を生成することが可能です: +- 次の情報に署名することで、**blob, queue, file services 用の lite shared key** を生成することが可能です: ```bash StringToSign = VERB + "\n" + Content-MD5 + "\n" + @@ -172,7 +172,7 @@ CanonicalizedResource; StringToSign = Date + "\n" CanonicalizedResource ``` -その後、key を使用するには、Authorization header で次の syntax に従って行うことができます: +その後、キーを使うには、Authorization header で次の構文に従って指定できます: ```bash Authorization="[SharedKey|SharedKeyLite] :" #e.g. @@ -186,14 +186,14 @@ Content-Length: 0 ``` ### **Shared Access Signature** (SAS) -Shared Access Signatures (SAS) は、Azure Storage account 内の resource にアクセスするための **特定の権限を付与する**、安全で時間制限付きの URL です。account の access keys を露出させずに利用できます。access keys はすべての resource への完全な管理者アクセスを提供しますが、SAS では read や write などの権限を指定し、有効期限を設定することで、きめ細かい制御が可能です。 +Shared Access Signatures (SAS) は、Azure Storage アカウント内の resource へのアクセスに対して**特定の permissions を付与する**、安全で time-limited な URLs です。アカウントの access keys を公開せずに済みます。access keys はすべての resources へのフル管理アクセスを提供しますが、SAS は permissions(read や write など)を細かく指定し、expiration time を定義することで granular control を可能にします。 #### SAS Types -- **User delegation SAS**: これは **Entra ID principal** から作成され、SAS に署名し、user から SAS へ権限を委任します。**blob and data lake storage** でのみ使用できます ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas))。生成された user delegated SAS はすべて **revoke** 可能です。 -- user にある権限よりも「多い」権限で delegation SAS を生成することは可能です。ただし、その principal がその権限を持っていなければ動作しません(privesc なし)。 +- **User delegation SAS**: これは **Entra ID principal** から作成され、SAS に署名し、user から SAS へ permissions を委任します。**blob and data lake storage** でのみ使用できます ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas))。生成された user delegated SAS はすべて **revoke** できます。 +- ユーザーが持つ permissions よりも「多い」 permissions を持つ delegation SAS を生成することは可能です。しかし、principal がそれらを持っていなければ機能しません(privesc なし)。 - **Service SAS**: これは storage account の **access keys** のいずれかを使って署名されます。単一の storage service 内の特定 resource へのアクセスを付与するために使用できます。key が renewed されると、SAS は動作しなくなります。 -- **Account SAS**: これも storage account の **access keys** のいずれかで署名されます。storage account services 全体(Blob, Queue, Table, File)の resource へのアクセスを付与でき、service-level operations を含めることができます。 +- **Account SAS**: これも storage account の **access keys** のいずれかで署名されます。storage account services(Blob、Queue、Table、File)をまたいで resources へのアクセスを付与でき、service-level operations を含められます。 **access key** で署名された SAS URL は次のようになります: @@ -211,43 +211,43 @@ Shared Access Signatures (SAS) は、Azure Storage account 内の resource に #### SAS permissions -SAS を生成する際には、付与すべき permissions を指定する必要があります。SAS を生成する対象の objet によって、含められる permissions は異なります。たとえば: +SAS を生成するときは、付与すべき permissions を指定する必要があります。SAS を生成する対象の object に応じて、含められる permissions は異なります。たとえば: - (a)dd, (c)reate, (d)elete, (e)xecute, (f)ilter_by_tags, (i)set_immutability_policy, (l)ist, (m)ove, (r)ead, (t)ag, (w)rite, (x)delete_previous_version, (y)permanent_delete ## SFTP Support for Azure Blob Storage -Azure Blob Storage は現在、SSH File Transfer Protocol (SFTP) をサポートしており、カスタムソリューションや third-party products を必要とせずに、Blob Storage へ直接、安全な file transfer と管理を可能にします。 +Azure Blob Storage は現在、SSH File Transfer Protocol (SFTP) をサポートしており、custom solutions や third-party products を必要とせずに、Blob Storage へ直接 secure file transfer と管理を可能にします。 ### Key Features -- Protocol Support: SFTP は、hierarchical namespace (HNS) が構成された Blob Storage accounts で動作します。これにより blobs は directories と subdirectories に整理され、移動が সহজになります。 -- Security: SFTP は認証に local user identities を使用し、RBAC や ABAC とは統合されません。各 local user は次の方法で認証できます: +- Protocol Support: SFTP は hierarchical namespace (HNS) を構成した Blob Storage accounts で動作します。これにより blobs を directories と subdirectories に整理し、移動しやすくなります。 +- Security: SFTP は local user identities を使用できますが、authorization のために Azure RBAC を伴う Microsoft Entra ID-based access もサポートします。つまり、local SFTP users を作成する代わりに、通常の Blob Storage data-plane roles で access を付与できます。Local users は以下で authenticate できます: - Azure-generated passwords - Public-private SSH key pairs -- Granular Permissions: Read, Write, Delete, List などの permissions を、最大 100 containers まで local users に割り当てられます。 -- Networking Considerations: SFTP connections は port 22 を通じて行われます。Azure は SFTP traffic を保護するために、firewalls、private endpoints、virtual networks などの network configurations をサポートします。 +- Granular Permissions: Read, Write, Delete, List などの permissions を local users に対して最大 100 containers まで割り当てられます。 +- Networking Considerations: SFTP connections は port 22 経由で行われます。Azure は SFTP traffic を保護するために、firewalls、private endpoints、virtual networks などの network configurations をサポートします。 ### Setup Requirements -- Hierarchical Namespace: storage account を作成する際に HNS を有効にする必要があります。 -- Supported Encryption: Microsoft Security Development Lifecycle (SDL) 承認の cryptographic algorithms(例: rsa-sha2-256, ecdsa-sha2-nistp256)が必要です。 +- Hierarchical Namespace: storage account 作成時に HNS を有効にする必要があります。 +- Supported Encryption: Microsoft Security Development Lifecycle (SDL) 承認済みの cryptographic algorithms(例: rsa-sha2-256, ecdsa-sha2-nistp256)が必要です。 - SFTP Configuration: -- storage account で SFTP を有効化します。 -- 適切な permissions を持つ local user identities を作成します。 -- users 用に home directories を構成し、container 内での開始位置を定義します。 +- storage account で SFTP を有効にします。 +- local-user access の場合、適切な permissions を持つ local user identities を作成します。 +- local users の場合、home directories を設定して container 内での開始位置を定義します。 ### Permissions | Permission | Symbol | Description | | ---------------------- | ------ | ------------------------------------ | -| **Read** | `r` | Read file content. | -| **Write** | `w` | Upload files and create directories. | -| **List** | `l` | List contents of directories. | -| **Delete** | `d` | Delete files or directories. | -| **Create** | `c` | Create files or directories. | -| **Modify Ownership** | `o` | Change the owning user or group. | -| **Modify Permissions** | `p` | Change ACLs on files or directories. | +| **Read** | `r` | ファイル内容を read します。 | +| **Write** | `w` | files を upload し、directories を create します。 | +| **List** | `l` | directories の内容を list します。 | +| **Delete** | `d` | files や directories を delete します。 | +| **Create** | `c` | files や directories を create します。 | +| **Modify Ownership** | `o` | owning user または group を変更します。 | +| **Modify Permissions** | `p` | files や directories の ACLs を変更します。 | ## Enumeration @@ -469,8 +469,9 @@ az-file-shares.md ## References - [https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction) -- [https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview) +- [https://learn.microsoft.microsoft.com/en-us/azure/storage/common/storage-sas-overview](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview) - [https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support](https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support) +- [https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support-entra-id-based-access](https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support-entra-id-based-access) - [Holiday Hack Challenge 2025 – Spare Key (Azure static website SAS leak)](https://0xdf.gitlab.io/holidayhack2025/act1/spare-key) - [Holiday Hack Challenge 2025: Blob Storage (Storage Secrets)](https://0xdf.gitlab.io/holidayhack2025/act1/blob-storage) - [https://learn.microsoft.com/en-us/cli/azure/storage/account](https://learn.microsoft.com/en-us/cli/azure/storage/account)