Az - Storage Accounts & Blobs
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Las Cuentas de Almacenamiento de Azure son servicios fundamentales en Microsoft Azure que proporcionan almacenamiento en la nube escalable, seguro y altamente disponible para varios tipos de datos, incluidos blobs (objetos grandes binarios), archivos, colas y tablas. Sirven como contenedores que agrupan estos diferentes servicios de almacenamiento bajo un único espacio de nombres para una fácil gestión.
Opciones de configuración principales:
Cada cuenta de almacenamiento debe tener un nombre único en todo Azure.
Cada cuenta de almacenamiento se despliega en una región o en una zona extendida de Azure.
Es posible seleccionar la versión premium de la cuenta de almacenamiento para un mejor rendimiento.
Es posible seleccionar entre 4 tipos de redundancia para proteger contra fallos de rack, disco y centro de datos.
Opciones de configuración de seguridad:
Requerir transferencia segura para operaciones de API REST: Requerir TLS en cualquier comunicación con el almacenamiento.
Permitir habilitar acceso anónimo en contenedores individuales: Si no, no será posible habilitar el acceso anónimo en el futuro.
Habilitar acceso con clave de cuenta de almacenamiento: Si no, el acceso con Claves Compartidas estará prohibido.
Versión mínima de TLS.
Ámbito permitido para operaciones de copia: Permitir desde cualquier cuenta de almacenamiento, desde cualquier cuenta de almacenamiento del mismo inquilino de Entra o desde cuentas de almacenamiento con puntos finales privados en la misma red virtual.
Opciones de Almacenamiento de Blobs:
Permitir replicación entre inquilinos.
Nivel de acceso: Caliente (datos de acceso frecuente), Frío y Congelado (datos de acceso raro).
Opciones de Red:
Acceso a la red:
Permitir desde todas las redes.
Permitir desde redes virtuales seleccionadas y direcciones IP.
Deshabilitar el acceso público y usar acceso privado.
Puntos finales privados: Permite una conexión privada a la cuenta de almacenamiento desde una red virtual.
Opciones de protección de datos:
Restauración en el tiempo para contenedores: Permite restaurar contenedores a un estado anterior.
Requiere que la versionado, el cambio de feed y la eliminación suave de blobs estén habilitados.
Habilitar eliminación suave para blobs: Permite un período de retención en días para blobs eliminados (incluso sobrescritos).
Habilitar eliminación suave para contenedores: Permite un período de retención en días para contenedores eliminados.
Habilitar eliminación suave para comparticiones de archivos: Permite un período de retención en días para comparticiones de archivos eliminadas.
Habilitar versionado para blobs: Mantener versiones anteriores de tus blobs.
Habilitar cambio de feed de blobs: Mantener registros de creación, modificación y eliminación de cambios en blobs.
Habilitar soporte de inmutabilidad a nivel de versión: Permite establecer una política de retención basada en el tiempo a nivel de cuenta que se aplicará a todas las versiones de blobs.
El soporte de inmutabilidad a nivel de versión y la restauración en el tiempo para contenedores no se pueden habilitar simultáneamente.
Opciones de configuración de cifrado:
Tipo de cifrado: Es posible usar claves gestionadas por Microsoft (MMK) o claves gestionadas por el cliente (CMK).
Habilitar cifrado de infraestructura: Permite cifrar los datos "para más seguridad".
Si "Permitir acceso público a Blobs" está habilitado (deshabilitado por defecto), al crear un contenedor es posible:
Dar acceso público para leer blobs (necesitas conocer el nombre).
Listar blobs del contenedor y leer ellos.
Hacerlo completamente privado.
Si encuentras algún almacenamiento al que puedas conectarte, podrías usar la herramienta Microsoft Azure Storage Explorer para hacerlo.
Es posible usar principios de Entra ID con roles RBAC para acceder a cuentas de almacenamiento y es la forma recomendada.
Las cuentas de almacenamiento tienen claves de acceso que se pueden usar para acceder a ellas. Esto proporciona acceso total a la cuenta de almacenamiento.
Es posible generar Claves Compartidas firmadas con las claves de acceso para autorizar el acceso a ciertos recursos a través de una URL firmada.
Note que la parte CanonicalizedResource
representa el recurso de servicios de almacenamiento (URI). Y si alguna parte de la URL está codificada, también debe estar codificada dentro de CanonicalizedResource
.
Esto es usado por defecto por az
cli para autenticar solicitudes. Para hacer que use las credenciales del principal de Entra ID, indica el parámetro --auth-mode login
.
Es posible generar una clave compartida para servicios de blobs, colas y archivos firmando la siguiente información:
Es posible generar una clave compartida para los servicios de tabla firmando la siguiente información:
Es posible generar una clave compartida ligera para los servicios de blob, cola y archivo firmando la siguiente información:
Es posible generar una clave compartida lite para los servicios de tabla firmando la siguiente información:
Luego, para usar la clave, se puede hacer en el encabezado de Autorización siguiendo la sintaxis:
Las Firmas de Acceso Compartido (SAS) son URLs seguras y limitadas en el tiempo que otorgan permisos específicos para acceder a recursos en una cuenta de Azure Storage sin exponer las claves de acceso de la cuenta. Mientras que las claves de acceso proporcionan acceso administrativo completo a todos los recursos, SAS permite un control granular al especificar permisos (como lectura o escritura) y definir un tiempo de expiración.
SAS de delegación de usuario: Esto se crea a partir de un principal de Entra ID que firmará el SAS y delegará los permisos del usuario al SAS. Solo se puede usar con blob y almacenamiento de data lake (docs). Es posible revocar todos los SAS delegados generados por el usuario.
Aunque es posible generar un SAS de delegación con "más" permisos de los que tiene el usuario. Sin embargo, si el principal no los tiene, no funcionará (sin privesc).
SAS de servicio: Esto se firma utilizando una de las claves de acceso de la cuenta de almacenamiento. Se puede usar para otorgar acceso a recursos específicos en un solo servicio de almacenamiento. Si la clave se renueva, el SAS dejará de funcionar.
SAS de cuenta: También se firma con una de las claves de acceso de la cuenta de almacenamiento. Otorga acceso a recursos a través de los servicios de una cuenta de almacenamiento (Blob, Queue, Table, File) y puede incluir operaciones a nivel de servicio.
Una URL SAS firmada por una clave de acceso se ve así:
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
Una URL SAS firmada como delegación de usuario se ve así:
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
Nota algunos http params:
El parámetro se
indica la fecha de expiración del SAS
El parámetro sp
indica los permisos del SAS
La sig
es la firma que valida el SAS
Al generar un SAS, es necesario indicar los permisos que debería otorgar. Dependiendo del objeto sobre el cual se está generando el SAS, se pueden incluir diferentes permisos. Por ejemplo:
(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
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Almacenamiento de Blobs
https://<storage-account>.blob.core.windows.net
https://<stg-acc>.blob.core.windows.net/<container-name>?restype=container&comp=list
Almacenamiento de Data Lake
https://<storage-account>.dfs.core.windows.net
Azure Files
https://<storage-account>.file.core.windows.net
Almacenamiento de Colas
https://<storage-account>.queue.core.windows.net
Almacenamiento de Tablas
https://<storage-account>.table.core.windows.net