mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-03-12 21:22:57 -07:00
Translated ['', 'src/pentesting-cloud/azure-security/az-services/az-stor
This commit is contained in:
@@ -1,97 +1,117 @@
|
||||
# Az - ストレージアカウントとBlob
|
||||
# Az - Storage Accounts & Blobs
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## 基本情報
|
||||
## Basic Information
|
||||
|
||||
Azure Storage Accountsは、Microsoft Azureの基本的なサービスで、スケーラブルで安全かつ高可用性のあるクラウド**ストレージをさまざまなデータタイプ**に提供します。これには、Blob(バイナリ大オブジェクト)、ファイル、キュー、テーブルが含まれます。これらは、簡単な管理のために単一の名前空間の下で異なるストレージサービスをグループ化するコンテナとして機能します。
|
||||
Azure Storage Accounts は、blobs (binary large objects)、files、queues、tables といったさまざまなデータタイプ向けのスケーラブルで安全かつ高可用なクラウドストレージを提供する、Microsoft Azure の基盤となるサービスです。これら異なるストレージサービスを単一のネームスペースの下でまとめて管理するためのコンテナとして機能します。
|
||||
|
||||
**主な構成オプション**:
|
||||
|
||||
- すべてのストレージアカウントは、**Azure全体でユニークな名前**を持つ必要があります。
|
||||
- すべてのストレージアカウントは、**リージョン**またはAzure拡張ゾーンにデプロイされます。
|
||||
- より良いパフォーマンスのために、ストレージアカウントの**プレミアム**バージョンを選択することが可能です。
|
||||
- ラック、ドライブ、データセンターの**障害**から保護するために、**4種類の冗長性を選択**できます。
|
||||
- すべての storage account は **Azure 全体で一意の名前** を持つ必要があります。
|
||||
- 各 storage account は **region** または Azure extended zone にデプロイされます。
|
||||
- より高いパフォーマンスのために **premium** バージョンの storage account を選択可能です。
|
||||
- ラック、ドライブ、データセンターの **障害** に対する保護のために **4 種類の冗長性** の中から選択できます。
|
||||
|
||||
**セキュリティ構成オプション**:
|
||||
|
||||
- **REST API操作のために安全な転送を要求**: ストレージとの通信にTLSを要求します。
|
||||
- **個々のコンテナでの匿名アクセスを有効にすることを許可**: そうでない場合、将来的に匿名アクセスを有効にすることはできません。
|
||||
- **ストレージアカウントキーアクセスを有効にする**: そうでない場合、共有キーによるアクセスは禁じられます。
|
||||
- **最小TLSバージョン**
|
||||
- **コピー操作の許可されたスコープ**: すべてのストレージアカウントから、同じEntraテナントのすべてのストレージアカウントから、または同じ仮想ネットワーク内のプライベートエンドポイントを持つストレージアカウントからのアクセスを許可します。
|
||||
- **Require secure transfer for REST API operations**: ストレージとの通信で TLS を必須にします。
|
||||
- **Allows enabling anonymous access on individual containers**: 無効にしている場合、将来的にコンテナで匿名アクセスを有効にすることはできません。
|
||||
- **Enable storage account key access**: 無効にすると Shared Keys によるアクセスは禁止されます。
|
||||
- **Minimum TLS version**
|
||||
- **Permitted scope for copy operations**: 任意の storage account から、同じ Entra tenant 内の任意の storage account から、または同じ仮想ネットワーク内の private endpoints を持つ storage account からの許可を選べます。
|
||||
|
||||
**Blobストレージオプション**:
|
||||
**Blob Storage オプション**:
|
||||
|
||||
- **クロステナントレプリケーションを許可**
|
||||
- **アクセス層**: ホット(頻繁にアクセスされるデータ)、クール、コールド(まれにアクセスされるデータ)
|
||||
- **Allow cross-tenant replication**
|
||||
- **Access tier**: Hot(頻繁にアクセスするデータ)、Cool、Cold(稀にアクセスするデータ)
|
||||
|
||||
**ネットワークオプション**:
|
||||
**Networking オプション**:
|
||||
|
||||
- **ネットワークアクセス**:
|
||||
- すべてのネットワークから許可
|
||||
- 選択した仮想ネットワークとIPアドレスから許可
|
||||
- 公開アクセスを無効にし、プライベートアクセスを使用
|
||||
- **プライベートエンドポイント**: 仮想ネットワークからストレージアカウントへのプライベート接続を許可します。
|
||||
- **Network access**:
|
||||
- Allow from all networks
|
||||
- Allow from selected virtual networks and IP addresses
|
||||
- Disable public access and use private access
|
||||
- **Private endpoints**: 仮想ネットワークから storage account へのプライベート接続を可能にします。
|
||||
|
||||
**データ保護オプション**:
|
||||
**Data protection オプション**:
|
||||
|
||||
- **コンテナのポイントインタイムリストア**: コンテナを以前の状態に復元することを許可します。
|
||||
- バージョニング、変更フィード、Blobソフト削除を有効にする必要があります。
|
||||
- **Blobのソフト削除を有効にする**: 削除されたBlob(上書きされたものも含む)に対して日数の保持期間を有効にします。
|
||||
- **コンテナのソフト削除を有効にする**: 削除されたコンテナに対して日数の保持期間を有効にします。
|
||||
- **ファイル共有のソフト削除を有効にする**: 削除されたファイル共有に対して日数の保持期間を有効にします。
|
||||
- **Blobのバージョニングを有効にする**: Blobの以前のバージョンを保持します。
|
||||
- **Blob変更フィードを有効にする**: Blobの作成、変更、削除の変更をログに保持します。
|
||||
- **バージョンレベルの不変性サポートを有効にする**: すべてのBlobバージョンに適用される時間ベースの保持ポリシーをアカウントレベルで設定できます。
|
||||
- バージョンレベルの不変性サポートとコンテナのポイントインタイムリストアは同時に有効にすることはできません。
|
||||
- **Point-in-time restore for containers**: コンテナを過去の状態に復元することを可能にします。
|
||||
- これには versioning、change feed、blob soft delete の有効化が必要です。
|
||||
- **Enable soft delete for blobs**: 削除された(上書きされたものも含む)blob に対して日数単位の保持期間を有効にします。
|
||||
- **Enable soft delete for containers**: 削除されたコンテナに対して日数単位の保持期間を有効にします。
|
||||
- **Enable soft delete for file shares**: 削除された file share に対して日数単位の保持期間を有効にします。
|
||||
- **Enable versioning for blobs**: blob の以前のバージョンを保持します。
|
||||
- **Enable blob change feed**: blob の作成、変更、削除の変更ログを保持します。
|
||||
- **Enable version-level immutability support**: アカウント レベルでの時間ベースの保持ポリシーを設定し、すべての blob バージョンに適用できるようにします。
|
||||
- version-level immutability support と point-in-time restore for containers は同時に有効にできません。
|
||||
|
||||
**暗号化構成オプション**:
|
||||
**Encryption 構成オプション**:
|
||||
|
||||
- **暗号化タイプ**: Microsoft管理キー(MMK)または顧客管理キー(CMK)を使用することが可能です。
|
||||
- **インフラストラクチャ暗号化を有効にする**: データを「より安全に」二重暗号化することを許可します。
|
||||
- **Encryption type**: Microsoft-managed keys (MMK) または Customer-managed keys (CMK) を使用できます。
|
||||
- **Enable infrastructure encryption**: データを二重に暗号化して「より強固なセキュリティ」を提供します。
|
||||
|
||||
### ストレージエンドポイント
|
||||
### Storage endpoints
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="197">ストレージサービス</th><th>エンドポイント</th></tr></thead><tbody><tr><td><strong>Blobストレージ</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>データレイクストレージ</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>キューストレージ</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>テーブルストレージ</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="197">Storage Service</th><th>Endpoint</th></tr></thead><tbody><tr><td><strong>Blob storage</strong></td><td><code>https://<storage-account>.blob.core.windows.net</code><br><br><code>https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list</code></td></tr><tr><td><strong>Data Lake Storage</strong></td><td><code>https://<storage-account>.dfs.core.windows.net</code></td></tr><tr><td><strong>Azure Files</strong></td><td><code>https://<storage-account>.file.core.windows.net</code></td></tr><tr><td><strong>Queue storage</strong></td><td><code>https://<storage-account>.queue.core.windows.net</code></td></tr><tr><td><strong>Table storage</strong></td><td><code>https://<storage-account>.table.core.windows.net</code></td></tr></tbody></table>
|
||||
|
||||
### 公開露出
|
||||
### Public Exposure
|
||||
|
||||
「Blobの公開アクセスを許可」が**有効**(デフォルトでは無効)になっている場合、コンテナを作成する際に次のことが可能です:
|
||||
"Allow Blob public access" が **enabled**(デフォルトは disabled)になっている場合、コンテナを作成する際に以下が可能です:
|
||||
|
||||
- **Blobを読むための公開アクセスを提供**(名前を知っている必要があります)。
|
||||
- **コンテナのBlobをリスト**し、**読む**ことができます。
|
||||
- 完全に**プライベート**にすることができます。
|
||||
- **public access to read blobs** を許可(名前を知っている必要があります)。
|
||||
- コンテナ内の **blob を列挙** して **読み取る**。
|
||||
- 完全に **private** にする。
|
||||
|
||||
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfoetUnYBPWQpRrWNnnlbqWpl8Rdoaeg5uBrCVlvcNDlnKwQHjZe8nUb2SfPspBgbu-lCZLmUei-hFi_Jl2eKbaxUtBGTjdUSDmkrcwr90VZkmuMjk9tyh92p75btfyzGiUTa0-=s2048?key=m8TV59TrCFPlkiNnmhYx3aZt" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### ストレージへの接続
|
||||
#### Auditing anonymous blob exposure
|
||||
|
||||
接続できる**ストレージ**を見つけた場合、[**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/)ツールを使用して接続できます。
|
||||
- **データを公開する可能性のある storage accounts を特定**: `az storage account list | jq -r '.[] | select(.properties.allowBlobPublicAccess==true) | .name'`。`allowBlobPublicAccess` が `false` の場合、コンテナを public にすることはできません。
|
||||
- **リスクのあるアカウントを確認**してフラグやその他の弱い設定を確認: `az storage account show --name <acc> --query '{allow:properties.allowBlobPublicAccess, minTls:properties.minimumTlsVersion}'`.
|
||||
- フラグが有効な場合の **container レベルの露出を列挙**:
|
||||
```bash
|
||||
az storage container list --account-name <acc> \
|
||||
--query '[].{name:name, access:properties.publicAccess}'
|
||||
```
|
||||
- `"Blob"`: 匿名での読み取りが許可されている **ただし blob 名が既知の場合のみ**(一覧表示は不可)。
|
||||
- `"Container"`: 匿名で全ての blob の **一覧取得 + 読み取り** が可能。
|
||||
- `null`: 非公開; 認証が必要。
|
||||
- **資格情報なしでアクセスを証明**:
|
||||
- `publicAccess` が `Container` の場合、匿名での一覧取得が可能: `curl "https://<acc>.blob.core.windows.net/<container>?restype=container&comp=list"`.
|
||||
- `Blob` と `Container` の両方で、名前が分かっていれば匿名での blob ダウンロードが可能:
|
||||
```bash
|
||||
az storage blob download -c <container> -n <blob> --account-name <acc> --file /dev/stdout
|
||||
# or via raw HTTP
|
||||
curl "https://<acc>.blob.core.windows.net/<container>/<blob>"
|
||||
```
|
||||
### ストレージに接続
|
||||
|
||||
アクセス可能な**ストレージ**を見つけたら、[**Microsoft Azure Storage Explorer**](https://azure.microsoft.com/es-es/products/storage/storage-explorer/) を使って接続できます。
|
||||
|
||||
## ストレージへのアクセス <a href="#about-blob-storage" id="about-blob-storage"></a>
|
||||
|
||||
### RBAC
|
||||
|
||||
ストレージアカウントにアクセスするために、**RBACロール**を使用してEntra IDプリンシパルを使用することが可能で、推奨される方法です。
|
||||
Entra ID のプリンシパルを使い、**RBAC roles** で storage accounts にアクセスすることが可能で、推奨される方法です。
|
||||
|
||||
### アクセスキー
|
||||
### Access Keys
|
||||
|
||||
ストレージアカウントには、アクセスするために使用できるアクセスキーがあります。これにより、ストレージアカウントへの**完全なアクセス**が提供されます。
|
||||
storage accounts にはアクセスに使用できる access keys があり、**これによりストレージアカウントへの完全なアクセスが可能になります。**
|
||||
|
||||
<figure><img src="../../../images/image (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### **共有キーとライト共有キー**
|
||||
### **Shared Keys & Lite Shared Keys**
|
||||
|
||||
特定のリソースへのアクセスを認可するために、アクセスキーで署名された[**共有キーを生成**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key)することが可能です。
|
||||
アクセスキーで署名された [**generate Shared Keys**](https://learn.microsoft.com/en-us/rest/api/storageservices/authorize-with-shared-key) を生成して、署名付き URL 経由で特定のリソースへのアクセスを許可することが可能です。
|
||||
|
||||
> [!NOTE]
|
||||
> `CanonicalizedResource`部分は、ストレージサービスリソース(URI)を表します。URLの任意の部分がエンコードされている場合、`CanonicalizedResource`内でもエンコードする必要があります。
|
||||
> `CanonicalizedResource` 部分はストレージサービスのリソース(URI)を表します。URL 内のいずれかの部分がエンコードされている場合は、`CanonicalizedResource` 内でも同様にエンコードされている必要があります。
|
||||
|
||||
> [!NOTE]
|
||||
> これは**デフォルトで`az` cliによって使用されます**。Entra IDプリンシパルの資格情報を使用するには、パラメータ`--auth-mode login`を指定します。
|
||||
> これはリクエストの認証において **既定で `az` cli によって使用されます**。Entra ID プリンシパルの資格情報を使用させるには、パラメータ `--auth-mode login` を指定してください。
|
||||
|
||||
- **Blob、キュー、ファイルサービスのための共有キーを生成**することが可能で、次の情報に署名します:
|
||||
- 次の情報に署名することで、**shared key for blob, queue and file services** を生成することが可能です:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-Encoding + "\n" +
|
||||
@@ -108,7 +128,7 @@ Range + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- **テーブルサービス**のための共有キーを生成することは、以下の情報に署名することで可能です:
|
||||
- 次の情報に署名することで **shared key for table services** を生成できます:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -116,7 +136,7 @@ Content-Type + "\n" +
|
||||
Date + "\n" +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- **Blob、キュー、ファイルサービス**のための**ライト共有キー**を生成することが可能で、以下の情報に署名します:
|
||||
- 次の情報に署名することで、**lite shared key for blob, queue and file services**を生成できます:
|
||||
```bash
|
||||
StringToSign = VERB + "\n" +
|
||||
Content-MD5 + "\n" +
|
||||
@@ -125,12 +145,12 @@ Date + "\n" +
|
||||
CanonicalizedHeaders +
|
||||
CanonicalizedResource;
|
||||
```
|
||||
- テーブルサービスのための**ライト共有キー**を生成することが可能です。次の情報に署名します:
|
||||
- 次の情報に署名することで、**lite shared key for table services** を生成することが可能です:
|
||||
```bash
|
||||
StringToSign = Date + "\n"
|
||||
CanonicalizedResource
|
||||
```
|
||||
その後、キーを使用するには、次の構文に従ってAuthorizationヘッダーに記述できます:
|
||||
次に、キーを使用するには、次の構文に従って Authorization ヘッダーに設定します:
|
||||
```bash
|
||||
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
|
||||
#e.g.
|
||||
@@ -142,75 +162,78 @@ x-ms-date: Fri, 26 Jun 2015 23:39:12 GMT
|
||||
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
|
||||
Content-Length: 0
|
||||
```
|
||||
### **Shared Access Signature** (SAS)
|
||||
### **共有アクセス署名** (SAS)
|
||||
|
||||
Shared Access Signatures (SAS) は、アカウントのアクセスキーを公開することなく、Azure Storage アカウント内のリソースにアクセスするための特定の権限を**付与する**安全で時間制限のある URL です。アクセスキーはすべてのリソースに対する完全な管理アクセスを提供しますが、SAS は権限(読み取りや書き込みなど)を指定し、期限を定義することで、より細かい制御を可能にします。
|
||||
Shared Access Signatures (SAS) は、Azure Storage アカウントのアカウントアクセスキーを公開せずにリソースへの特定のアクセス権を付与する、セキュアで時間制限付きの URL です。アクセスキーは全リソースへの管理者権限を与えるのに対し、SAS は読み取りや書き込みなどの権限を指定し、有効期限を定義することで細かい制御を可能にします。
|
||||
|
||||
#### SAS タイプ
|
||||
#### SAS の種類
|
||||
|
||||
- **ユーザー委任 SAS**: これは **Entra ID プリンシパル** から作成され、SAS に署名し、ユーザーから SAS への権限を委任します。これは **blob およびデータレイクストレージ** でのみ使用できます ([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas))。生成されたすべてのユーザー委任 SAS を **取り消す** ことが可能です。
|
||||
- ユーザーが持っている権限よりも「多くの」権限を持つ委任 SAS を生成することは可能ですが、プリンシパルがそれらの権限を持っていない場合は機能しません(権限昇格はありません)。
|
||||
- **サービス SAS**: これはストレージアカウントの **アクセスキー** のいずれかを使用して署名されます。これは、単一のストレージサービス内の特定のリソースへのアクセスを付与するために使用できます。キーが更新されると、SAS は機能しなくなります。
|
||||
- **アカウント SAS**: これもストレージアカウントの **アクセスキー** のいずれかで署名されます。これは、ストレージアカウントサービス(Blob、Queue、Table、File)全体のリソースへのアクセスを付与し、サービスレベルの操作を含むことができます。
|
||||
- **User delegation SAS**: これは **Entra ID principal** から作成され、principal が SAS に署名してユーザーから SAS へ権限を委譲します。**blob and data lake storage** のみで使用できます([docs](https://learn.microsoft.com/en-us/rest/api/storageservices/create-user-delegation-sas))。生成された user delegated SAS をすべて **revoke** することが可能です。
|
||||
- ユーザーよりも「多い」権限で delegation SAS を生成できる場合があっても、principal がそれらの権限を持っていなければ機能しません(no privesc)。
|
||||
- **Service SAS**: これはストレージアカウントのいずれかの **access keys** を使って署名されます。単一のストレージサービス内の特定リソースへのアクセス付与に使えます。キーが更新されると、その SAS は動作しなくなります。
|
||||
- **Account SAS**: 同様にストレージアカウントの **access keys** で署名されます。Blob、Queue、Table、File といったストレージアカウントサービス全体のリソースへアクセスを付与でき、サービスレベルの操作を含めることができます。
|
||||
|
||||
**アクセスキー** で署名された SAS URL は次のようになります:
|
||||
access key によって署名された SAS URL の例:
|
||||
|
||||
- `https://<container_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D`
|
||||
|
||||
**ユーザー委任** として署名された SAS URL は次のようになります:
|
||||
user delegation として署名された SAS URL の例:
|
||||
|
||||
- `https://<container_name>.blob.core.windows.net/testing-container?sp=r&st=2024-11-22T15:07:40Z&se=2024-11-22T23:07:40Z&skoid=d77c71a1-96e7-483d-bd51-bd753aa66e62&sktid=fdd066e1-ee37-49bc-b08f-d0e152119b04&skt=2024-11-22T15:07:40Z&ske=2024-11-22T23:07:40Z&sks=b&skv=2022-11-02&spr=https&sv=2022-11-02&sr=c&sig=7s5dJyeE6klUNRulUj9TNL0tMj2K7mtxyRc97xbYDqs%3D`
|
||||
|
||||
いくつかの **http パラメータ** に注意してください:
|
||||
いくつかの **http params** に注意:
|
||||
|
||||
- **`se`** パラメータは SAS の **有効期限** を示します
|
||||
- **`sp`** パラメータは SAS の **権限** を示します
|
||||
- **`sig`** は SAS を検証するための **署名** です
|
||||
- The **`se`** param indicates the **expiration date** of the SAS
|
||||
- The **`sp`** param indicates the **permissions** of the SAS
|
||||
- The **`sig`** is the **signature** validating the SAS
|
||||
|
||||
#### SAS 権限
|
||||
#### SAS permissions
|
||||
|
||||
SAS を生成する際には、付与すべき権限を示す必要があります。SAS が生成されるオブジェクトによって、異なる権限が含まれる場合があります。例えば:
|
||||
SAS を生成する際には、付与する権限を指定する必要があります。SAS を生成する対象オブジェクトによって含める権限は異なります。例えば:
|
||||
|
||||
- (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 サポート for Azure Blob Storage
|
||||
## Azure Blob Storage の SFTP サポート
|
||||
|
||||
Azure Blob Storage は現在、SSH ファイル転送プロトコル (SFTP) をサポートしており、カスタムソリューションやサードパーティ製品を必要とせずに、Blob Storage への安全なファイル転送と管理を可能にします。
|
||||
Azure Blob Storage は現在 SSH File Transfer Protocol (SFTP) をサポートしており、カスタムソリューションやサードパーティ製品を必要とせずに直接 Blob Storage へ安全なファイル転送と管理が行えます。
|
||||
|
||||
### 主な機能
|
||||
|
||||
- プロトコルサポート: SFTP は階層名前空間 (HNS) で構成された Blob Storage アカウントで動作します。これにより、Blob をディレクトリおよびサブディレクトリに整理し、ナビゲーションを容易にします。
|
||||
- セキュリティ: SFTP は認証のためにローカルユーザーのアイデンティティを使用し、RBAC や ABAC とは統合されていません。各ローカルユーザーは次の方法で認証できます:
|
||||
- Azure 生成のパスワード
|
||||
- 公開鍵-秘密鍵の SSH キーペア
|
||||
- 細かい権限: 読み取り、書き込み、削除、リストなどの権限を最大 100 のコンテナに対してローカルユーザーに割り当てることができます。
|
||||
- ネットワークの考慮事項: SFTP 接続はポート 22 を通じて行われます。Azure は、SFTP トラフィックを保護するためにファイアウォール、プライベートエンドポイント、または仮想ネットワークなどのネットワーク構成をサポートしています。
|
||||
- Protocol Support: SFTP は hierarchical namespace (HNS) が有効な Blob Storage アカウントで動作します。これにより blobs をディレクトリやサブディレクトリに整理してナビゲーションを容易にします。
|
||||
- Security: SFTP は認証にローカルユーザーのアイデンティティを使用し、RBAC や ABAC と統合されません。各ローカルユーザーは以下で認証できます:
|
||||
- Azure-generated passwords
|
||||
- Public-private SSH key pairs
|
||||
- Granular Permissions: Read、Write、Delete、List といった権限をローカルユーザーに対して最大 100 コンテナまで割り当てできます。
|
||||
- Networking Considerations: SFTP 接続はポート 22 を通じて行われます。Azure はファイアウォール、private endpoints、virtual networks といったネットワーク設定をサポートして SFTP トラフィックを保護します。
|
||||
|
||||
### セットアップ要件
|
||||
### 設定要件
|
||||
|
||||
- 階層名前空間: ストレージアカウントを作成する際に HNS を有効にする必要があります。
|
||||
- サポートされる暗号化: Microsoft Security Development Lifecycle (SDL) に承認された暗号アルゴリズム (例: rsa-sha2-256, ecdsa-sha2-nistp256) が必要です。
|
||||
- SFTP 設定:
|
||||
- ストレージアカウントで SFTP を有効にします。
|
||||
- 適切な権限を持つローカルユーザーのアイデンティティを作成します。
|
||||
- コンテナ内でのユーザーの開始位置を定義するために、ユーザーのホームディレクトリを構成します。
|
||||
- Hierarchical Namespace: ストレージアカウント作成時に HNS を有効にする必要があります。
|
||||
- Supported Encryption: Microsoft Security Development Lifecycle (SDL) 承認の暗号アルゴリズム(例: rsa-sha2-256、ecdsa-sha2-nistp256)を要求します。
|
||||
- SFTP Configuration:
|
||||
- Enable SFTP on the storage account.
|
||||
- Create local user identities with appropriate permissions.
|
||||
- Configure home directories for users to define their starting location within the container.
|
||||
|
||||
### 権限
|
||||
|
||||
| 権限 | シンボル | 説明 |
|
||||
| Permission | Symbol | Description |
|
||||
| ---------------------- | ------ | ------------------------------------ |
|
||||
| **読み取り** | `r` | ファイルの内容を読み取ります。 |
|
||||
| **書き込み** | `w` | ファイルをアップロードし、ディレクトリを作成します。 |
|
||||
| **リスト** | `l` | ディレクトリの内容をリストします。 |
|
||||
| **削除** | `d` | ファイルまたはディレクトリを削除します。 |
|
||||
| **作成** | `c` | ファイルまたはディレクトリを作成します。 |
|
||||
| **所有権の変更** | `o` | 所有するユーザーまたはグループを変更します。 |
|
||||
| **権限の変更** | `p` | ファイルまたはディレクトリの ACL を変更します。 |
|
||||
| **Read** | `r` | ファイルの内容を読み取ります。 |
|
||||
| **Write** | `w` | ファイルのアップロードとディレクトリの作成ができます。 |
|
||||
| **List** | `l` | ディレクトリの内容を一覧表示します。 |
|
||||
| **Delete** | `d` | ファイルやディレクトリを削除します。 |
|
||||
| **Create** | `c` | ファイルやディレクトリを作成します。 |
|
||||
| **Modify Ownership** | `o` | 所有者ユーザーまたはグループを変更します。 |
|
||||
| **Modify Permissions** | `p` | ファイルやディレクトリの ACL を変更します。 |
|
||||
|
||||
## 列挙
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
|
||||
<details>
|
||||
<summary>az cli の列挙</summary>
|
||||
```bash
|
||||
# Get storage accounts
|
||||
az storage account list #Get the account name from here
|
||||
@@ -327,10 +350,15 @@ az storage account local-user list \
|
||||
--account-name <storage-account-name> \
|
||||
--resource-group <resource-group-name>
|
||||
```
|
||||
</details>
|
||||
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell" }}
|
||||
```bash
|
||||
|
||||
<details>
|
||||
<summary>Az PowerShell enumeration</summary>
|
||||
```powershell
|
||||
# Get storage accounts
|
||||
Get-AzStorageAccount | fl
|
||||
# Get rules to access the storage account
|
||||
@@ -387,6 +415,8 @@ New-AzStorageBlobSASToken `
|
||||
-Permission racwdl `
|
||||
-ExpiryTime (Get-Date "2024-12-31T23:59:00Z")
|
||||
```
|
||||
</details>
|
||||
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
@@ -396,19 +426,19 @@ New-AzStorageBlobSASToken `
|
||||
az-file-shares.md
|
||||
{{#endref}}
|
||||
|
||||
## 権限昇格
|
||||
## Privilege Escalation
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-storage-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## ポストエクスプロイト
|
||||
## Post Exploitation
|
||||
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-blob-storage-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
## 永続性
|
||||
## Persistence
|
||||
|
||||
{{#ref}}
|
||||
../az-persistence/az-storage-persistence.md
|
||||
@@ -419,5 +449,9 @@ az-file-shares.md
|
||||
- [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.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)
|
||||
- [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)
|
||||
- [https://learn.microsoft.com/en-us/cli/azure/storage/container](https://learn.microsoft.com/en-us/cli/azure/storage/container)
|
||||
- [https://learn.microsoft.com/en-us/cli/azure/storage/blob](https://learn.microsoft.com/en-us/cli/azure/storage/blob)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
Reference in New Issue
Block a user