Az - Comptes de stockage et blobs

Reading time: 16 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Informations de base

Les comptes de stockage Azure sont des services fondamentaux dans Microsoft Azure qui fournissent un stockage cloud Ă©volutif, sĂ©curisĂ© et hautement disponible pour divers types de donnĂ©es, y compris les blobs (objets binaires volumineux), les fichiers, les files d'attente et les tables. Ils servent de conteneurs qui regroupent ces diffĂ©rents services de stockage sous un mĂȘme espace de noms pour une gestion facile.

Options de configuration principales :

  • Chaque compte de stockage doit avoir un nom unique dans tous Azure.
  • Chaque compte de stockage est dĂ©ployĂ© dans une rĂ©gion ou dans une zone Ă©tendue Azure.
  • Il est possible de sĂ©lectionner la version premium du compte de stockage pour de meilleures performances.
  • Il est possible de choisir parmi 4 types de redondance pour se protĂ©ger contre les pannes de rack, de disque et de centre de donnĂ©es.

Options de configuration de sécurité :

  • Exiger un transfert sĂ©curisĂ© pour les opĂ©rations de l'API REST : Exiger TLS dans toute communication avec le stockage.
  • Permettre l'accĂšs anonyme sur des conteneurs individuels : Sinon, il ne sera pas possible d'activer l'accĂšs anonyme Ă  l'avenir.
  • Activer l'accĂšs par clĂ© de compte de stockage : Sinon, l'accĂšs avec des clĂ©s partagĂ©es sera interdit.
  • Version TLS minimale.
  • PortĂ©e autorisĂ©e pour les opĂ©rations de copie : Autoriser depuis n'importe quel compte de stockage, depuis n'importe quel compte de stockage du mĂȘme locataire Entra ou depuis un compte de stockage avec des points de terminaison privĂ©s dans le mĂȘme rĂ©seau virtuel.

Options de stockage de blobs :

  • Autoriser la rĂ©plication inter-locataires.
  • Niveau d'accĂšs : Chaud (donnĂ©es frĂ©quemment accessibles), Froid et TrĂšs Froid (donnĂ©es rarement accessibles).

Options de mise en réseau :

  • AccĂšs rĂ©seau :
  • Autoriser depuis tous les rĂ©seaux.
  • Autoriser depuis des rĂ©seaux virtuels et des adresses IP sĂ©lectionnĂ©s.
  • DĂ©sactiver l'accĂšs public et utiliser l'accĂšs privĂ©.
  • Points de terminaison privĂ©s : Permet une connexion privĂ©e au compte de stockage depuis un rĂ©seau virtuel.

Options de protection des données :

  • Restauration Ă  un instant donnĂ© pour les conteneurs : Permet de restaurer les conteneurs Ă  un Ă©tat antĂ©rieur.
  • Cela nĂ©cessite que la version, le flux de modifications et la suppression douce des blobs soient activĂ©s.
  • Activer la suppression douce pour les blobs : Cela active une pĂ©riode de conservation en jours pour les blobs supprimĂ©s (mĂȘme Ă©crasĂ©s).
  • Activer la suppression douce pour les conteneurs : Cela active une pĂ©riode de conservation en jours pour les conteneurs supprimĂ©s.
  • Activer la suppression douce pour les partages de fichiers : Cela active une pĂ©riode de conservation en jours pour les partages de fichiers supprimĂ©s.
  • Activer la version pour les blobs : Maintenir les versions prĂ©cĂ©dentes de vos blobs.
  • Activer le flux de modifications des blobs : Conserver des journaux des crĂ©ations, modifications et suppressions des blobs.
  • Activer le support d'immuabilitĂ© au niveau de la version : Vous permet de dĂ©finir une politique de conservation basĂ©e sur le temps au niveau du compte qui s'appliquera Ă  toutes les versions de blobs.
  • Le support d'immuabilitĂ© au niveau de la version et la restauration Ă  un instant donnĂ© pour les conteneurs ne peuvent pas ĂȘtre activĂ©s simultanĂ©ment.

Options de configuration de chiffrement :

  • Type de chiffrement : Il est possible d'utiliser des clĂ©s gĂ©rĂ©es par Microsoft (MMK) ou des clĂ©s gĂ©rĂ©es par le client (CMK).
  • Activer le chiffrement de l'infrastructure : Permet de chiffrer les donnĂ©es deux fois "pour plus de sĂ©curitĂ©".

Points de terminaison de stockage

Service de stockagePoint de terminaison
Stockage de blobshttps://.blob.core.windows.net

https://.blob.core.windows.net/?restype=container&comp=list
Stockage de Data Lakehttps://.dfs.core.windows.net
Azure Fileshttps://.file.core.windows.net
Stockage de files d'attentehttps://.queue.core.windows.net
Stockage de tableshttps://.table.core.windows.net

Exposition publique

Si "Autoriser l'accÚs public aux blobs" est activé (désactivé par défaut), lors de la création d'un conteneur, il est possible de :

  • Donner un accĂšs public pour lire les blobs (vous devez connaĂźtre le nom).
  • Lister les blobs du conteneur et les lire.
  • Le rendre entiĂšrement privĂ©.

Connexion au stockage

Si vous trouvez un stockage auquel vous pouvez vous connecter, vous pouvez utiliser l'outil Microsoft Azure Storage Explorer pour le faire.

AccĂšs au stockage

RBAC

Il est possible d'utiliser des identifiants Entra ID avec des rÎles RBAC pour accéder aux comptes de stockage et c'est la méthode recommandée.

Clés d'accÚs

Les comptes de stockage ont des clĂ©s d'accĂšs qui peuvent ĂȘtre utilisĂ©es pour y accĂ©der. Cela fournit un accĂšs complet au compte de stockage.

Clés partagées et clés partagées légÚres

Il est possible de générer des clés partagées signées avec les clés d'accÚs pour autoriser l'accÚs à certaines ressources via une URL signée.

note

Notez que la partie CanonicalizedResource reprĂ©sente la ressource des services de stockage (URI). Et si une partie de l'URL est encodĂ©e, elle doit Ă©galement ĂȘtre encodĂ©e Ă  l'intĂ©rieur de CanonicalizedResource.

note

Ceci est utilisé par défaut par az cli pour authentifier les demandes. Pour qu'il utilise les identifiants de l'identifiant Entra, indiquez le paramÚtre --auth-mode login.

  • Il est possible de gĂ©nĂ©rer une clĂ© partagĂ©e pour les services de blobs, de files d'attente et de fichiers en signant les informations suivantes :
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;
  • Il est possible de gĂ©nĂ©rer une clĂ© partagĂ©e pour les services de table en signant les informations suivantes :
bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedResource;
  • Il est possible de gĂ©nĂ©rer une clĂ© partagĂ©e lĂ©gĂšre pour les services blob, queue et file en signant les informations suivantes :
bash
StringToSign = VERB + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
  • Il est possible de gĂ©nĂ©rer une lite shared key for table services en signant les informations suivantes :
bash
StringToSign = Date + "\n"
CanonicalizedResource

Ensuite, pour utiliser la clĂ©, cela peut se faire dans l'en-tĂȘte Authorization en suivant la syntaxe :

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

Signature d'accÚs partagé (SAS)

Les signatures d'accÚs partagé (SAS) sont des URL sécurisées et temporisées qui accordent des autorisations spécifiques pour accéder aux ressources dans un compte de stockage Azure sans exposer les clés d'accÚs du compte. Alors que les clés d'accÚs fournissent un accÚs administratif complet à toutes les ressources, le SAS permet un contrÎle granulaire en spécifiant des autorisations (comme lire ou écrire) et en définissant une durée d'expiration.

Types de SAS

  • SAS de dĂ©lĂ©gation utilisateur : Cela est créé Ă  partir d'un principal Entra ID qui signera le SAS et dĂ©lĂšguera les autorisations de l'utilisateur au SAS. Il ne peut ĂȘtre utilisĂ© qu'avec blob et stockage de lac de donnĂ©es (docs). Il est possible de rĂ©voquer tous les SAS dĂ©lĂ©guĂ©s par l'utilisateur gĂ©nĂ©rĂ©s.
  • MĂȘme s'il est possible de gĂ©nĂ©rer un SAS de dĂ©lĂ©gation avec "plus" d'autorisations que celles dont dispose l'utilisateur. Cependant, si le principal ne les a pas, cela ne fonctionnera pas (pas de privesc).
  • SAS de service : Cela est signĂ© en utilisant l'une des clĂ©s d'accĂšs du compte de stockage. Il peut ĂȘtre utilisĂ© pour accorder l'accĂšs Ă  des ressources spĂ©cifiques dans un seul service de stockage. Si la clĂ© est renouvelĂ©e, le SAS cessera de fonctionner.
  • SAS de compte : Il est Ă©galement signĂ© avec l'une des clĂ©s d'accĂšs du compte de stockage. Il accorde l'accĂšs aux ressources Ă  travers les services d'un compte de stockage (Blob, Queue, Table, File) et peut inclure des opĂ©rations au niveau du service.

Une URL SAS signée par une clé d'accÚs ressemble à ceci :

  • 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

Une URL SAS signée en tant que délégation utilisateur ressemble à ceci :

  • 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

Notez quelques params http :

  • Le paramĂštre se indique la date d'expiration du SAS
  • Le paramĂštre sp indique les autorisations du SAS
  • Le sig est la signature validant le SAS

Autorisations SAS

Lors de la gĂ©nĂ©ration d'un SAS, il est nĂ©cessaire d'indiquer les autorisations qu'il doit accorder. Selon l'objet sur lequel le SAS est gĂ©nĂ©rĂ©, diffĂ©rentes autorisations peuvent ĂȘtre incluses. Par exemple :

  • (a)jouter, (c)rĂ©er, (d)Ă©lete, (e)xĂ©cuter, (f)iltrer_par_tags, (i)ndiquer_politique_d'immuabilitĂ©, (l)ister, (m)ouvoir, (r)ead, (t)ag, (w)riter, (x)supprimer_version_prĂ©cĂ©dente, (y)suppression_permanente

Support SFTP pour Azure Blob Storage

Azure Blob Storage prend désormais en charge le protocole de transfert de fichiers SSH (SFTP), permettant un transfert et une gestion de fichiers sécurisés directement vers Blob Storage sans nécessiter de solutions personnalisées ou de produits tiers.

Caractéristiques clés

  • Support de protocole : SFTP fonctionne avec des comptes de stockage Blob configurĂ©s avec un espace de noms hiĂ©rarchique (HNS). Cela organise les blobs en rĂ©pertoires et sous-rĂ©pertoires pour une navigation plus facile.
  • SĂ©curitĂ© : SFTP utilise des identitĂ©s d'utilisateur local pour l'authentification et ne s'intĂšgre pas avec RBAC ou ABAC. Chaque utilisateur local peut s'authentifier via :
  • Mots de passe gĂ©nĂ©rĂ©s par Azure
  • Paires de clĂ©s SSH publiques-privĂ©es
  • Autorisations granulaires : Des autorisations telles que Lire, Écrire, Supprimer et Lister peuvent ĂȘtre attribuĂ©es aux utilisateurs locaux pour jusqu'Ă  100 conteneurs.
  • ConsidĂ©rations rĂ©seau : Les connexions SFTP se font par le port 22. Azure prend en charge des configurations rĂ©seau telles que des pare-feu, des points de terminaison privĂ©s ou des rĂ©seaux virtuels pour sĂ©curiser le trafic SFTP.

Exigences de configuration

  • Espace de noms hiĂ©rarchique : HNS doit ĂȘtre activĂ© lors de la crĂ©ation du compte de stockage.
  • Chiffrement pris en charge : NĂ©cessite des algorithmes cryptographiques approuvĂ©s par le cycle de dĂ©veloppement de sĂ©curitĂ© de Microsoft (SDL) (par exemple, rsa-sha2-256, ecdsa-sha2-nistp256).
  • Configuration SFTP :
  • Activer SFTP sur le compte de stockage.
  • CrĂ©er des identitĂ©s d'utilisateur local avec les autorisations appropriĂ©es.
  • Configurer des rĂ©pertoires personnels pour les utilisateurs afin de dĂ©finir leur emplacement de dĂ©part dans le conteneur.

Autorisations

AutorisationSymboleDescription
LirerLire le contenu du fichier.
ÉcrirewTĂ©lĂ©charger des fichiers et crĂ©er des rĂ©pertoires.
ListerlLister le contenu des répertoires.
SupprimerdSupprimer des fichiers ou des répertoires.
CréercCréer des fichiers ou des répertoires.
Modifier la propriétéoChanger l'utilisateur ou le groupe propriétaire.
Modifier les autorisationspChanger les ACL sur les fichiers ou répertoires.

ÉnumĂ©ration

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>

Partages de fichiers

Az - File Shares

Escalade de privilĂšges

Az - Storage Privesc

Post-exploitation

Az - Blob Storage Post Exploitation

Persistance

Az - Storage Persistence

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks