Az - Blob Storage

Support HackTricks

Basic Information

From the docs: Azure Blob storage는 Microsoft의 클라우드를 위한 객체 저장 솔루션입니다. Blob 저장소는 대량의 비정형 데이터를 저장하는 데 최적화되어 있습니다. 비정형 데이터는 텍스트나 이진 데이터와 같이 특정 데이터 모델이나 정의를 따르지 않는 데이터입니다.

Blob 저장소는 세 가지 유형의 리소스를 제공합니다:

  • 저장소 계정 (고유 이름)

  • 저장소 계정의 컨테이너 (폴더)

  • 컨테이너의 블롭

Different types of storage

Access to Storage

  • Azure AD 주체를 RBAC 역할을 통해 사용합니다.

  • 액세스 키: 저장소 계정의 액세스 키를 사용합니다. 이는 저장소 계정에 대한 전체 액세스를 제공합니다.

  • 공유 액세스 서명 (SAS): 시간 제한 및 특정 권한.

  • 액세스 키로 SAS URL을 생성할 수 있습니다 (탐지하기 더 복잡함).

  • SAS는 액세스 키에서 생성되므로, 키가 갱신되면 SAS는 작동을 멈춥니다.

Public Exposure

"Blob 공개 액세스 허용"이 활성화되어 있으면 (기본적으로 비활성화), 다음을 수행할 수 있습니다:

  • 블롭을 읽기 위한 공개 액세스 제공 (이름을 알아야 함).

  • 컨테이너 블롭 목록읽기.

Connect to Storage

연결할 수 있는 저장소를 찾으면 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를 사용하여 데이터에 액세스하거나 파이썬을 사용할 수 있습니다:

#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) 토큰을 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 서비스 중 하나에 대한 리소스에 대한 액세스를 위임합니다: Blob 저장소, 큐 저장소, 테이블 저장소 또는 Azure Files. 서비스 수준 SAS의 URI는 SAS가 액세스를 위임할 리소스의 URI로 구성되며, 그 뒤에 SAS 토큰이 옵니다.

Azure Active Directory (Azure AD) 자격 증명을 사용하여 컨테이너 또는 블롭에 대한 SAS를 보안하려면 사용자 위임 SAS를 사용하십시오.

계정 SAS

계정 SAS는 저장소 계정 키 중 하나로 보안됩니다(2개가 있음). 계정 SAS는 하나 이상의 저장소 서비스의 리소스에 대한 액세스를 위임합니다. 서비스 또는 사용자 위임 SAS를 통해 사용할 수 있는 모든 작업은 계정 SAS를 통해서도 사용할 수 있습니다.

[문서에서:] (https://learn.microsoft.com/en-us/rest/api/storageservices/create-account-sas) 계정 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>

References

HackTricks 지원하기

Last updated