Az - Storage Accounts & Blobs

Reading time: 14 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Osnovne informacije

Azure Storage Accounts su osnovne usluge u Microsoft Azure koje pružaju skalabilnu, sigurnu i visoko dostupnu cloud pohranu za različite tipove podataka, uključujući blobove (binarni veliki objekti), datoteke, redove i tabele. Oni služe kao kontejneri koji grupišu ove različite usluge pohrane pod jednim imenom za lakše upravljanje.

Glavne opcije konfiguracije:

  • Svaki storage account mora imati jedinstveno ime u okviru celog Azure-a.
  • Svaki storage account se implementira u regionu ili u proširenoj zoni Azure-a.
  • Moguće je odabrati premium verziju storage account-a za bolju performansu.
  • Moguće je odabrati između 4 tipa redundancije za zaštitu od kvarova rack-a, diska i datacentra.

Opcije konfiguracije sigurnosti:

  • Zahtevati sigurni prenos za REST API operacije: Zahtevati TLS u bilo kojoj komunikaciji sa pohranom.
  • Omogućava omogućavanje anonimnog pristupa na pojedinačnim kontejnerima: Ako ne, neće biti moguće omogućiti anonimni pristup u budućnosti.
  • Omogućiti pristup ključu storage account-a: Ako ne, pristup sa Shared Keys će biti zabranjen.
  • Minimalna TLS verzija.
  • Dozvoljeni opseg za operacije kopiranja: Dozvoliti iz bilo kog storage account-a, iz bilo kog storage account-a iz istog Entra tenant-a ili iz storage account-a sa privatnim krajnjim tačkama u istoj virtuelnoj mreži.

Opcije Blob Storage-a:

  • Dozvoliti replikaciju između tenant-a.
  • Pristupni nivo: Vrući (često pristupani podaci), Hladan i Zaleđen (retko pristupani podaci).

Opcije umrežavanja:

  • Pristup mreži:
  • Dozvoliti iz svih mreža.
  • Dozvoliti iz odabranih virtuelnih mreža i IP adresa.
  • Onemogućiti javni pristup i koristiti privatni pristup.
  • Privatne krajnje tačke: Omogućava privatnu vezu sa storage account-om iz virtuelne mreže.

Opcije zaštite podataka:

  • Obnavljanje u tački vremena za kontejnere: Omogućava vraćanje kontejnera u ranije stanje.
  • Zahteva verzionisanje, promena feed-a i soft delete za blobove da bi bili omogućeni.
  • Omogućiti soft delete za blobove: Omogućava period zadržavanja u danima za obrisane blobove (čak i prepisane).
  • Omogućiti soft delete za kontejnere: Omogućava period zadržavanja u danima za obrisane kontejnere.
  • Omogućiti soft delete za deljene datoteke: Omogućava period zadržavanja u danima za obrisane deljene datoteke.
  • Omogućiti verzionisanje za blobove: Održava prethodne verzije vaših blobova.
  • Omogućiti blob change feed: Čuva logove o kreiranju, izmenama i brisanju blobova.
  • Omogućiti podršku za imutabilnost na nivou verzije: Omogućava postavljanje politike zadržavanja zasnovane na vremenu na nivou naloga koja će se primenjivati na sve verzije blobova.
  • Podrška za imutabilnost na nivou verzije i obnavljanje u tački vremena za kontejnere ne mogu se omogućiti istovremeno.

Opcije konfiguracije enkripcije:

  • Tip enkripcije: Moguće je koristiti ključeve koje upravlja Microsoft (MMK) ili ključeve koje upravlja korisnik (CMK).
  • Omogućiti infrastrukturalnu enkripciju: Omogućava dvostruku enkripciju podataka "za veću sigurnost".

Storage krajnje tačke

Storage uslugaKrajnja tačka
Blob storagehttps://.blob.core.windows.net

https://.blob.core.windows.net/?restype=container&comp=list
Data Lake Storagehttps://.dfs.core.windows.net
Azure Fileshttps://.file.core.windows.net
Queue storagehttps://.queue.core.windows.net
Table storagehttps://.table.core.windows.net

Javno izlaganje

Ako je "Dozvoli javni pristup blobovima" omogućeno (podrazumevano onemogućeno), prilikom kreiranja kontejnera moguće je:

  • Dati javni pristup za čitanje blobova (morate znati ime).
  • Lista kontejnerskih blobova i čitati ih.
  • Učiniti ga potpuno privatnim.

Povezivanje sa pohranom

Ako pronađete bilo koju pohranu kojoj možete pristupiti, možete koristiti alat Microsoft Azure Storage Explorer za to.

Pristup pohrani

RBAC

Moguće je koristiti Entra ID principe sa RBAC rolama za pristup storage account-ima i to je preporučeni način.

Pristupni ključevi

Storage account-i imaju pristupne ključeve koji se mogu koristiti za pristup. Ovo pruža potpun pristup storage account-u.

Deljeni ključevi i Lite deljeni ključevi

Moguće je generisati deljene ključeve potpisane pristupnim ključevima za autorizaciju pristupa određenim resursima putem potpisanog URL-a.

note

Imajte na umu da deo CanonicalizedResource predstavlja resurs usluga pohrane (URI). I ako je bilo koji deo u URL-u kodiran, takođe bi trebao biti kodiran unutar CanonicalizedResource.

note

Ovo je podrazumevano korišćeno od strane az cli za autentifikaciju zahteva. Da biste koristili kredencijale Entra ID principa, navedite parametar --auth-mode login.

  • Moguće je generisati deljeni ključ za blob, red i usluge datoteka potpisivanjem sledećih informacija:
bash
StringToSign = VERB + "\n" +
Content-Encoding + "\n" +
Content-Language + "\n" +
Content-Length + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
If-Modified-Since + "\n" +
If-Match + "\n" +
If-None-Match + "\n" +
If-Unmodified-Since + "\n" +
Range + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
  • Moguće je generisati deljeni ključ za usluge tabela potpisivanjem sledećih informacija:
bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedResource;
  • Moguće je generisati lite deljeni ključ za blob, queue i file servise potpisivanjem sledećih informacija:
bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
  • Moguće je generisati lite shared key for table services potpisivanjem sledećih informacija:
bash
StringToSign = Date + "\n"
CanonicalizedResource

Zatim, da biste koristili ključ, to se može uraditi u Authorization header-u prema sintaksi:

bash
Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>"
#e.g.
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=

PUT http://myaccount/mycontainer?restype=container&timeout=30 HTTP/1.1
x-ms-version: 2014-02-14
x-ms-date: Fri, 26 Jun 2015 23:39:12 GMT
Authorization: SharedKey myaccount:ctzMq410TV3wS7upTBcunJTDLEJwMAZuFPfr0mrrA08=
Content-Length: 0

Shared Access Signature (SAS)

Shared Access Signatures (SAS) su sigurni, vremenski ograničeni URL-ovi koji dodeljuju specifične dozvole za pristup resursima u Azure Storage nalogu bez izlaganja pristupnih ključeva naloga. Dok pristupni ključevi pružaju punu administrativnu kontrolu nad svim resursima, SAS omogućava granularnu kontrolu tako što specificira dozvole (kao što su čitanje ili pisanje) i definiše vreme isteka.

SAS Types

  • User delegation SAS: Ovo se kreira iz Entra ID principal koji će potpisati SAS i delegirati dozvole od korisnika na SAS. Može se koristiti samo sa blob i data lake storage (docs). Moguće je opozvati sve generisane korisničke delegirane SAS.
  • Čak i ako je moguće generisati delegaciju SAS sa "više" dozvola nego što korisnik ima. Međutim, ako principal nema te dozvole, neće raditi (nema privesc).
  • Service SAS: Ovo se potpisuje koristeći jedan od pristupnih ključeva storage naloga. Može se koristiti za dodeljivanje pristupa specifičnim resursima u jednoj usluzi skladištenja. Ako se ključ obnovi, SAS će prestati da funkcioniše.
  • Account SAS: Takođe se potpisuje jednim od pristupnih ključeva storage naloga. Dodeljuje pristup resursima širom usluga skladištenja naloga (Blob, Queue, Table, File) i može uključivati operacije na nivou usluge.

SAS URL potpisan pristupnim ključem izgleda ovako:

  • 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 potpisan kao user delegation izgleda ovako:

  • 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

Napomena o nekim http params:

  • se param označava datum isteka SAS-a
  • sp param označava dozvole SAS-a
  • sig je potpis koji validira SAS

SAS permissions

Kada se generiše SAS, potrebno je naznačiti dozvole koje bi trebalo da dodeljuje. U zavisnosti od objekta nad kojim se generiše SAS, različite dozvole mogu biti uključene. Na primer:

  • (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 sada podržava SSH File Transfer Protocol (SFTP), omogućavajući sigurnu razmenu i upravljanje datotekama direktno u Blob Storage bez potrebe za prilagođenim rešenjima ili proizvodima trećih strana.

Key Features

  • Protocol Support: SFTP radi sa Blob Storage nalozima konfiguriranim sa hijerarhijskim imenskim prostorom (HNS). Ovo organizuje blobove u direktorijume i poddirektorijume radi lakše navigacije.
  • Security: SFTP koristi lokalne korisničke identitete za autentifikaciju i ne integriše se sa RBAC ili ABAC. Svaki lokalni korisnik može se autentifikovati putem:
  • Azure-generisanih lozinki
  • Javnih i privatnih SSH ključeva
  • Granular Permissions: Dozvole kao što su Čitanje, Pisanje, Brisanje i Lista mogu se dodeliti lokalnim korisnicima za do 100 kontejnera.
  • Networking Considerations: SFTP veze se uspostavljaju preko porta 22. Azure podržava mrežne konfiguracije kao što su vatrozidi, privatne tačke ili virtuelne mreže za zaštitu SFTP saobraćaja.

Setup Requirements

  • Hierarchical Namespace: HNS mora biti omogućen prilikom kreiranja naloga za skladištenje.
  • Supported Encryption: Zahteva Microsoft Security Development Lifecycle (SDL)-odobrene kriptografske algoritme (npr. rsa-sha2-256, ecdsa-sha2-nistp256).
  • SFTP Configuration:
  • Omogućite SFTP na nalogu za skladištenje.
  • Kreirajte lokalne korisničke identitete sa odgovarajućim dozvolama.
  • Konfigurišite početne direktorijume za korisnike kako biste definisali njihovu početnu lokaciju unutar kontejnera.

Permissions

PermissionSymbolDescription
ReadrČitaj sadržaj datoteke.
WritewUčitaj datoteke i kreiraj direktorijume.
ListlLista sadržaj direktorijuma.
DeletedObriši datoteke ili direktorijume.
CreatecKreiraj datoteke ili direktorijume.
Modify OwnershipoPromeni korisnika ili grupu vlasnika.
Modify PermissionspPromeni ACL-ove na datotekama ili direktorijumima.

Enumeration

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

# BLOB STORAGE
## List containers
az storage container list --account-name <name>
## Check if public access is allowed
az storage container show-permission \
--account-name <acc-name> \
-n <container-name>
## Make a container public
az storage container set-permission \
--public-access container \
--account-name <acc-name> \
-n <container-name>
## List blobs in a container
az storage blob list \
--container-name <container name> \
--account-name <account name>
## Download blob
az storage blob download \
--account-name <account name> \
--container-name <container name> \
--name <blob name> \
--file </path/to/local/file>
## Create container policy
az storage container policy create \
--account-name mystorageaccount \
--container-name mycontainer \
--name fullaccesspolicy \
--permissions racwdl \
--start 2023-11-22T00:00Z \
--expiry 2024-11-22T00:00Z

# QUEUE
az storage queue list --account-name <name>
az storage message peek --account-name <name> --queue-name <queue-name>

# ACCESS KEYS
az storage account keys list --account-name <name>
## Check key policies (expiration time?)
az storage account show -n <name> --query "{KeyPolicy:keyPolicy}"
## Once having the key, it's possible to use it with the argument --account-key
## Enum blobs with account key
az storage blob list \
--container-name <container name> \
--account-name <account name> \
--account-key "ZrF40pkVKvWPUr[...]v7LZw=="
## Download a file using an account key
az storage blob download \
--account-name <account name> \
--account-key "ZrF40pkVKvWPUr[...]v7LZw==" \
--container-name <container name> \
--name <blob name> \
--file </path/to/local/file>
## Upload a file using an account key
az storage blob upload \
--account-name <account name> \
--account-key "ZrF40pkVKvWPUr[...]v7LZw==" \
--container-name <container name> \
--file </path/to/local/file>

# SAS
## List access policies
az storage <container|queue|share|table> policy list \
--account-name <acc name> \
--container-name <container name>

## Generate SAS with all permissions using an access key
az storage <container|queue|share|table|blob> generate-sas \
--permissions acdefilmrtwxy \
--expiry 2024-12-31T23:59:00Z \
--account-name <acc-name> \
-n <container-name>

## Generate SAS with all permissions using via user delegation
az storage <container|queue|share|table|blob> generate-sas \
--permissions acdefilmrtwxy \
--expiry 2024-12-31T23:59:00Z \
--account-name <acc-name> \
--as-user --auth-mode login \
-n <container-name>

## Generate account SAS
az storage account generate-sas \
--expiry 2024-12-31T23:59:00Z \
--account-name <acc-name>  \
--services qt \
--resource-types sco \
--permissions acdfilrtuwxy

## Use the returned SAS key with the param --sas-token
## e.g.
az storage blob show \
--account-name <account name> \
--container-name <container name> \
--sas-token 'se=2024-12-31T23%3A59%3A00Z&sp=racwdxyltfmei&sv=2022-11-02&sr=c&sig=ym%2Bu%2BQp5qqrPotIK5/rrm7EMMxZRwF/hMWLfK1VWy6E%3D' \
--name 'asd.txt'

#Local-Users
## List users
az storage account local-user list \
--account-name <storage-account-name> \
--resource-group <resource-group-name>
## Get user
az storage account local-user show \
--account-name <storage-account-name> \
--resource-group <resource-group-name> \
--name <local-user-name>

## List keys
az storage account local-user list \
--account-name <storage-account-name> \
--resource-group <resource-group-name>

Deljenje fajlova

Az - File Shares

Eskalacija privilegija

Az - Storage Privesc

Post Eksploatacija

Az - Blob Storage Post Exploitation

Postojanost

Az - Storage Persistence

Reference

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks