Az - Akaunti za Hifadhi na Blobs

Reading time: 15 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Taarifa za Msingi

Akaunti za Hifadhi za Azure ni huduma za msingi katika Microsoft Azure zinazotoa hifadhi ya wingu inayoweza kupanuka, salama, na inayopatikana kwa urahisi kwa aina mbalimbali za data, ikiwa ni pamoja na blobs (vitu vikubwa vya binary), faili, foleni, na meza. Zinatumika kama vyombo vinavyokutanisha huduma hizi tofauti za hifadhi chini ya jina moja kwa usimamizi rahisi.

Chaguzi kuu za usanidi:

  • Kila akaunti ya hifadhi lazima iwe na jina la kipekee katika Azure yote.
  • Kila akaunti ya hifadhi inapelekwa katika eneo au katika eneo la kupanua la Azure
  • Inawezekana kuchagua toleo la premium la akaunti ya hifadhi kwa utendaji bora
  • Inawezekana kuchagua kati ya aina 4 za upungufu ili kulinda dhidi ya kushindwa kwa rack, diski na kituo cha data failures.

Chaguzi za usanidi wa Usalama:

  • Hitaji usafirishaji salama kwa shughuli za REST API: Hitaji TLS katika mawasiliano yoyote na hifadhi
  • Inaruhusu kuwezesha ufikiaji wa siri kwenye vyombo vya kibinafsi: Ikiwa sivyo, haitakuwa na uwezo wa kuwezesha ufikiaji wa siri katika siku zijazo
  • Wezesha ufikiaji wa funguo za akaunti ya hifadhi: Ikiwa sivyo, ufikiaji kwa Funguo za Kushiriki utafungiwa
  • Tofauti ya chini ya TLS
  • Muktadha unaoruhusiwa kwa shughuli za nakala: Ruhusu kutoka akaunti yoyote ya hifadhi, kutoka akaunti yoyote ya hifadhi kutoka kwa mpangilio sawa wa Entra au kutoka akaunti ya hifadhi yenye viunganisho vya kibinafsi katika mtandao wa virtual sawa.

Chaguzi za Hifadhi za Blob:

  • Ruhusu upatanishi wa kuvuka mpangilio
  • Kiwango cha ufikiaji: Moto (data inayofikiwa mara kwa mara), Baridi na Baridi (data inayofikiwa mara chache)

Chaguzi za Mtandao:

  • Ufikiaji wa Mtandao:
  • Ruhusu kutoka mitandao yote
  • Ruhusu kutoka mitandao ya virtual iliyochaguliwa na anwani za IP
  • Zima ufikiaji wa umma na tumia ufikiaji wa kibinafsi
  • Viunganisho vya Kibinafsi: Inaruhusu muunganisho wa kibinafsi kwa akaunti ya hifadhi kutoka mtandao wa virtual

Chaguzi za Ulinzi wa Data:

  • Kurejesha kwa wakati kwa vyombo: Inaruhusu kurejesha vyombo katika hali ya awali
  • Inahitaji toleo, mabadiliko ya chakula, na kufutwa kwa blob kwa urahisi kuwezeshwe.
  • Wezesha kufutwa kwa urahisi kwa blobs: Inaruhusu kipindi cha uhifadhi kwa siku kwa blobs zilizofutwa (hata zilizofutwa)
  • Wezesha kufutwa kwa urahisi kwa vyombo: Inaruhusu kipindi cha uhifadhi kwa siku kwa vyombo vilivyofutwa
  • Wezesha kufutwa kwa urahisi kwa sehemu za faili: Inaruhusu kipindi cha uhifadhi kwa siku kwa sehemu za faili zilizofutwa
  • Wezesha toleo kwa blobs: Hifadhi toleo za awali za blobs zako
  • Wezesha mabadiliko ya blob: Hifadhi kumbukumbu za kuunda, kubadilisha, na kufuta mabadiliko kwa blobs
  • Wezesha msaada wa kutokuwepo kwa kiwango cha toleo: Inaruhusu kuweka sera ya uhifadhi kulingana na muda kwenye kiwango cha akaunti ambayo itatumika kwa toleo zote za blob.
  • Msaada wa kutokuwepo kwa kiwango cha toleo na kurejesha kwa wakati kwa vyombo haviwezi kuwezeshwa kwa wakati mmoja.

Chaguzi za Usimbaji:

  • Aina ya Usimbaji: Inawezekana kutumia funguo zinazodhibitiwa na Microsoft (MMK) au funguo zinazodhibitiwa na Mteja (CMK)
  • Wezesha usimbaji wa miundombinu: Inaruhusu kusimbwa mara mbili kwa data "kwa usalama zaidi"

Viunganisho vya Hifadhi

Huduma ya HifadhiKiunganishi
Hifadhi ya Blobhttps://.blob.core.windows.net

https://.blob.core.windows.net/?restype=container&comp=list
Hifadhi ya Ziwa la Datahttps://.dfs.core.windows.net
Faili za Azurehttps://.file.core.windows.net
Hifadhi ya Folenihttps://.queue.core.windows.net
Hifadhi ya Mezahttps://.table.core.windows.net

Ufunuo wa Umma

Ikiwa "Ruhusu ufikiaji wa umma wa Blob" ime wezeshwa (imezimwa kwa default), wakati wa kuunda chombo inawezekana:

  • Kutoa ufikiaji wa umma kusoma blobs (unahitaji kujua jina).
  • Orodhesha blobs za chombo na zisome.
  • Fanya iwe binafsi kabisa

Unganisha na Hifadhi

Ikiwa unapata hifadhi yoyote unayoweza kuunganishwa nayo unaweza kutumia zana Microsoft Azure Storage Explorer kufanya hivyo.

Ufikiaji wa Hifadhi

RBAC

Inawezekana kutumia wahusika wa Entra ID na majukumu ya RBAC kufikia akaunti za hifadhi na ndiyo njia inayopendekezwa.

Funguo za Ufikiaji

Akaunti za hifadhi zina funguo za ufikiaji ambazo zinaweza kutumika kuziunganisha. Hii inatoa ufikiaji kamili kwa akaunti ya hifadhi.

Funguo za Kushiriki & Funguo za Kushiriki za Lite

Inawezekana kuunda Funguo za Kushiriki zilizotiwa saini na funguo za ufikiaji ili kuidhinisha ufikiaji wa rasilimali fulani kupitia URL iliyotiwa saini.

note

Kumbuka kwamba sehemu ya CanonicalizedResource inawakilisha rasilimali ya huduma za hifadhi (URI). Na ikiwa sehemu yoyote katika URL imeandikwa, inapaswa pia kuandikwa ndani ya CanonicalizedResource.

note

Hii inatumiwa kwa default na az cli kuthibitisha maombi. Ili kufanya itumie akidi za wahusika wa Entra ID onyesha paramu --auth-mode login.

  • Inawezekana kuunda funguo za kushiriki kwa huduma za blob, foleni na faili kwa kusaini taarifa zifuatazo:
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;
  • Inawezekana kuunda funguo ya pamoja kwa huduma za meza kwa kusaini taarifa zifuatazo:
bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedResource;
  • Inawezekana kuunda lite shared key kwa huduma za blob, queue na file kwa kusaini taarifa zifuatazo:
bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
  • Inawezekana kuunda lite shared key for table services kwa kusaini taarifa zifuatazo:
bash
StringToSign = Date + "\n"
CanonicalizedResource

Kisha, kutumia funguo, inaweza kufanywa katika kichwa cha Uidhinishaji ikifuatia muundo:

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) ni URL salama, zenye muda wa ukomo ambazo zinatoa ruhusa maalum za kufikia rasilimali katika akaunti ya Azure Storage bila kufichua funguo za ufikiaji za akaunti. Wakati funguo za ufikiaji zinatoa ufikiaji kamili wa kiutawala kwa rasilimali zote, SAS inaruhusu udhibiti wa kina kwa kubainisha ruhusa (kama kusoma au kuandika) na kufafanua muda wa kumalizika.

Aina za SAS

  • User delegation SAS: Hii inaundwa kutoka kwa Entra ID principal ambayo itatia saini SAS na kuhamasisha ruhusa kutoka kwa mtumiaji hadi SAS. Inaweza kutumika tu na blob na data lake storage (docs). Inawezekana kufuta SAS zote zilizozalishwa za mtumiaji.
  • Hata kama inawezekana kuzalisha delegation SAS yenye ruhusa "zaidi" kuliko zile ambazo mtumiaji ana. Hata hivyo, ikiwa principal hana hizo, haitafanya kazi (hakuna privesc).
  • Service SAS: Hii inatiwa saini kwa kutumia moja ya access keys za akaunti ya storage. Inaweza kutumika kutoa ufikiaji kwa rasilimali maalum katika huduma moja ya storage. Ikiwa funguo itarejeshwa, SAS itakoma kufanya kazi.
  • Account SAS: Pia inatiwa saini kwa moja ya access keys za akaunti ya storage. Inatoa ufikiaji kwa rasilimali katika huduma za akaunti ya storage (Blob, Queue, Table, File) na inaweza kujumuisha operesheni za kiwango cha huduma.

URL ya SAS iliyotiwa saini na access key inaonekana kama ifuatavyo:

  • 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

URL ya SAS iliyotiwa saini kama user delegation inaonekana kama ifuatavyo:

  • 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

Kumbuka baadhi ya http params:

  • Param se inaonyesha tarehe ya kumalizika ya SAS
  • Param sp inaonyesha ruhusa za SAS
  • sig ni saini inayothibitisha SAS

Ruhusa za SAS

Wakati wa kuzalisha SAS inahitajika kubainisha ruhusa ambazo inapaswa kutoa. Kulingana na kitu ambacho SAS inazalishwa juu yake, ruhusa tofauti zinaweza kujumuishwa. Kwa mfano:

  • (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 sasa inasaidia SSH File Transfer Protocol (SFTP), ikiruhusu uhamishaji wa faili salama na usimamizi moja kwa moja kwa Blob Storage bila kuhitaji suluhisho maalum au bidhaa za upande wa tatu.

Vipengele Muhimu

  • Msaada wa Protokali: SFTP inafanya kazi na akaunti za Blob Storage zilizowekwa na hierarchical namespace (HNS). Hii inaratibu blobs katika saraka na subdirectories kwa urahisi wa urambazaji.
  • Usalama: SFTP inatumia vitambulisho vya watumiaji wa ndani kwa uthibitisho na haijumuishi na RBAC au ABAC. Kila mtumiaji wa ndani anaweza kuthibitisha kupitia:
  • Nywila zinazozalishwa na Azure
  • Mifumo ya funguo za SSH za umma na binafsi
  • Ruhusa za Kina: Ruhusa kama Kusoma, Kuandika, Kufuta, na Kuweka zinaweza kutolewa kwa watumiaji wa ndani kwa hadi kontena 100.
  • Mambo ya Mtandao: Munganisho wa SFTP unafanywa kupitia bandari 22. Azure inasaidia usanidi wa mtandao kama vile moto, maeneo ya kibinafsi, au mitandao ya virtual ili kulinda trafiki ya SFTP.

Mahitaji ya Usanidi

  • Hierarchical Namespace: HNS lazima iwekwe wakati wa kuunda akaunti ya storage.
  • Usimbuaji Unaounga Mkono: Inahitaji algorithimu za usimbuaji zilizothibitishwa na Microsoft Security Development Lifecycle (SDL) (mfano, rsa-sha2-256, ecdsa-sha2-nistp256).
  • Usanidi wa SFTP:
  • Wezesha SFTP kwenye akaunti ya storage.
  • Unda vitambulisho vya watumiaji wa ndani na ruhusa zinazofaa.
  • Sanidi saraka za nyumbani kwa watumiaji ili kufafanua eneo lao la kuanzia ndani ya kontena.

Ruhusa

RuhusaAlamaMaelezo
KusomarSoma maudhui ya faili.
KuandikawPakia faili na unda saraka.
Kuweka OrodhalOrodhesha maudhui ya saraka.
KufutadFuta faili au saraka.
KuundacUnda faili au saraka.
Badilisha UmilikioBadilisha mtumiaji au kundi linalomiliki.
Badilisha RuhusapBadilisha ACLs kwenye faili au saraka.

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>

File Shares

Az - File Shares

Privilege Escalation

Az - Storage Privesc

Post Exploitation

Az - Blob Storage Post Exploitation

Persistence

Az - Storage Persistence

References

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks