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 principales de configuración:
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 la 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 Frío (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".
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
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.
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 los 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 blobs, colas y servicios de 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 lite para los servicios de blob, cola y archivo firmando la siguiente información:
Es posible generar una clave compartida lite para 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 la 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
El 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
Azure Blob Storage ahora admite el Protocolo de Transferencia de Archivos SSH (SFTP), lo que permite la transferencia y gestión segura de archivos directamente a Blob Storage sin requerir soluciones personalizadas o productos de terceros.
Soporte de Protocolo: SFTP funciona con cuentas de Blob Storage configuradas con espacio de nombres jerárquico (HNS). Esto organiza los blobs en directorios y subdirectorios para una navegación más fácil.
Seguridad: SFTP utiliza identidades de usuario locales para la autenticación y no se integra con RBAC o ABAC. Cada usuario local puede autenticarse a través de:
Contraseñas generadas por Azure
Pares de claves SSH públicas y privadas
Permisos Granulares: Se pueden asignar permisos como Leer, Escribir, Eliminar y Listar a usuarios locales para hasta 100 contenedores.
Consideraciones de Red: Las conexiones SFTP se realizan a través del puerto 22. Azure admite configuraciones de red como firewalls, puntos finales privados o redes virtuales para asegurar el tráfico SFTP.
Espacio de Nombres Jerárquico: HNS debe estar habilitado al crear la cuenta de almacenamiento.
Cifrado Soportado: Requiere algoritmos criptográficos aprobados por el Ciclo de Vida de Desarrollo de Seguridad de Microsoft (SDL) (por ejemplo, rsa-sha2-256, ecdsa-sha2-nistp256).
Configuración de SFTP:
Habilitar SFTP en la cuenta de almacenamiento.
Crear identidades de usuario locales con permisos apropiados.
Configurar directorios de inicio para los usuarios para definir su ubicación de inicio dentro del contenedor.
Leer
r
Leer el contenido del archivo.
Escribir
w
Subir archivos y crear directorios.
Listar
l
Listar el contenido de los directorios.
Eliminar
d
Eliminar archivos o directorios.
Crear
c
Crear archivos o directorios.
Modificar Propiedad
o
Cambiar el usuario o grupo propietario.
Modificar Permisos
p
Cambiar ACLs en archivos o directorios.
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)