Az - Blob Storage

Support HackTricks

基本情報

ドキュメントから: Azure Blob storageはMicrosoftのクラウド向けオブジェクトストレージソリューションです。Blob storageは大量の非構造化データを保存するために最適化されています。非構造化データとは、特定のデータモデルや定義に従わないデータのことです。例えば、テキストやバイナリデータなどです。

Blob storageは3種類のリソースを提供します:

  • ストレージアカウント(一意の名前)

  • ストレージアカウント内のコンテナ(フォルダ)

  • コンテナ内のBlob

ストレージの種類

Blob storage

https://<storage-account>.blob.core.windows.net https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list

Azure Data Lake Storage Gen2

https://<storage-account>.dfs.core.windows.net

Azure Files

https://<storage-account>.file.core.windows.net

Queue storage

https://<storage-account>.queue.core.windows.net

Table storage

https://<storage-account>.table.core.windows.net

ストレージへのアクセス

  • RBACロールをサポートするAzure ADプリンシパルを使用。

  • アクセスキー: ストレージアカウントのアクセスキーを使用。これにより、ストレージアカウントへの完全なアクセスが提供されます。

  • Shared Access Signature (SAS): 時間制限および特定の権限。

  • アクセスキーを使用してSAS URLを生成できます(検出がより困難)。

  • SASはアクセスキーから生成されるため、アクセスキーが更新されるとSASは機能しなくなります。

公開露出

「Allow Blob public access」が有効(デフォルトでは無効)になっている場合、以下が可能です:

  • Blobの読み取りのための公開アクセスを提供(名前を知っている必要があります)。

  • コンテナのBlobをリストし、それらを読み取る

ストレージへの接続

ストレージを見つけた場合、Microsoft Azure Storage Explorerツールを使用して接続できます。

SAS URLs

ドキュメントから: Shared Access Signature (SAS)は、ストレージアカウント内のリソースへの安全な委任アクセスを提供します。SASを使用すると、クライアントがデータにアクセスする方法を細かく制御できます。例えば:

  • クライアントがアクセスできるリソース。

  • それらのリソースに対する権限。

  • SASの有効期間。

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

データにアクセスするにはStorage Explorerまたはpythonを使用します:

#pip3 install azure-storage-blob
from azure.storage.blob import BlobServiceClient

# List containers
conn_str="<SAS URL>"
svc = BlobServiceClient.from_connection_string(conn_str=conn_str)
for c in svc.list_containers():
print(c['name'])

# List blobs inside the containers
container = svc.get_container_client(container=c['name'])

for b in container.list_blobs():
print(b['name'])


# Download all the blobs
blob_name = b['name'].split("/")[::-1][0]
blob = svc.get_blob_client(container=c['name'],blob=b['name'])
with open(blob_name,"wb") as f:
f.write(blob.download_blob().readall())

User delegation SAS

Azure Active Directory (Azure AD) 資格情報またはアカウントキーを使用して、コンテナ、ディレクトリ、またはblobへのアクセスのための共有アクセス署名 (SAS) トークンをセキュリティ保護できます。ユーザー委任SASを作成するには、まずユーザー委任キーをリクエストし、それを使用してSASに署名します。

User Delegation Shared Access Signature (SAS) は、Azure Blob Storage および Azure Data Lake Storage Gen2 の両方でサポートされています。ただし、Stored Access Policies はユーザー委任SASと互換性がないことに注意してください。

ユーザー委任SASはストレージアカウントキーの代わりにAzure AD資格情報で保護されていることに注意してください。これにより、クライアント/アプリケーションがSASを作成するためにストレージキーを保存/取得することを防ぎます。

Service SAS

サービスSASはストレージアカウントキーで保護されています。サービスSASは、Azure Storageサービスのうちの1つのリソースへのアクセスを委任します: Blob storage、Queue storage、Table storage、またはAzure Files。サービスレベルのSASのURIは、SASがアクセスを委任するリソースへのURIに続いてSASトークンが続きます。

Azure Active Directory (Azure AD) 資格情報を使用してコンテナまたはblobのSASを保護するには、ユーザー委任SASを使用します。

Account SAS

アカウントSASは、2つのストレージアカウントキーのうちの1つで保護されています。アカウントSASは、1つ以上のストレージサービスのリソースへのアクセスを委任します。サービスまたはユーザー委任SASを介して利用可能なすべての操作は、アカウントSASを介しても利用可能です。

ドキュメントから: アカウントSASを作成することで、以下が可能になります:

  • サービス固有のSASでは現在利用できないGet/Set Service PropertiesGet Service Stats操作などのサービスレベルの操作へのアクセスを委任します。

  • 一度にストレージアカウント内の複数のサービスへのアクセスを委任します。例えば、アカウントSASを使用してAzure Blob StorageとAzure Filesの両方のリソースへのアクセスを委任できます。

  • オブジェクト固有のSASでは利用できないコンテナ、キュー、テーブル、およびファイル共有の書き込みおよび削除操作へのアクセスを委任します。

  • リクエストを受け入れるIPアドレスまたはIPアドレスの範囲を指定します。

  • リクエストを受け入れるHTTPプロトコル(HTTPSまたはHTTP/HTTPSのいずれか)を指定します。

Enumeration

# Get storage accounts
az storage account list #Get the account name from here

# Get keys to authenticate
az storage account keys list --account-name <name>

# Get shares
az storage share list --account-name <name> --account-key <key>

# Get dirs/files inside the share
az storage file list --account-name <name> --share-name <share-name> --account-key <key>
## If type is "dir", you can continue enumerationg files inside of it
az storage file list --account-name <name> --share-name <prev_dir/share-name> --account-key <key>

# Download a complete share (with directories and files inside of them)
az storage file download-batch -d . --source <share-name> --account-name <name> --account-key <key>

参考文献

HackTricksをサポートする

Last updated