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
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
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 stockage | Point de terminaison |
---|---|
Stockage de blobs | https:// https:// |
Stockage de Data Lake | https:// |
Azure Files | https:// |
Stockage de files d'attente | https:// |
Stockage de tables | https:// |
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.
.png)
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 :
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 :
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 :
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 :
StringToSign = Date + "\n"
CanonicalizedResource
Ensuite, pour utiliser la clĂ©, cela peut se faire dans l'en-tĂȘte Authorization en suivant la syntaxe :
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
Autorisation | Symbole | Description |
---|---|---|
Lire | r | Lire le contenu du fichier. |
Ăcrire | w | TĂ©lĂ©charger des fichiers et crĂ©er des rĂ©pertoires. |
Lister | l | Lister le contenu des répertoires. |
Supprimer | d | Supprimer des fichiers ou des répertoires. |
Créer | c | Créer des fichiers ou des répertoires. |
Modifier la propriété | o | Changer l'utilisateur ou le groupe propriétaire. |
Modifier les autorisations | p | Changer les ACL sur les fichiers ou répertoires. |
ĂnumĂ©ration
# 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
Escalade de privilĂšges
Post-exploitation
Az - Blob Storage Post Exploitation
Persistance
Références
- https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction
- https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview
- https://learn.microsoft.com/en-us/azure/storage/blobs/secure-file-transfer-protocol-support
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
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.