Az - Blob Storage

Support HackTricks

基本情報

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

Blobストレージは、3種類のリソースを提供します:

  • ストレージアカウント(ユニークな名前)

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

  • コンテナ内のBlob

ストレージの種類

ストレージへのアクセス

  • RBACロールを介してAzure ADプリンシパルを使用します。

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

  • 共有アクセス署名(SAS):時間制限と特定の権限。

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

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

公開露出

「Blobの公開アクセスを許可する」が有効になっている場合(デフォルトでは無効)、次のことが可能です:

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

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

ストレージへの接続

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

SAS URLs

From the docs: 共有アクセス署名(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())

ユーザー委任SAS

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

Azure Blob StorageAzure Data Lake Storage Gen2の両方で**ユーザー委任共有アクセス署名(SAS)**がサポートされています。ただし、保存されたアクセスポリシーはユーザー委任SASと互換性がないことに注意してください。

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

サービスSAS

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

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

アカウントSAS

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

from the docs: アカウントSASを作成することで、次のことができます:

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

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

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

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

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

列挙

# 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