Azure Pentesting

Support HackTricks

AINDA ESTOU CONSTRUINDO A METODOLOGIA AZURE

Informações Básicas

Az - Basic Information

Metodologia de Pentester/Red Team para Azure

Para auditar um ambiente AZURE, é muito importante saber: quais serviços estão sendo usados, o que está sendo exposto, quem tem acesso a o quê, e como os serviços internos do Azure e serviços externos estão conectados.

Do ponto de vista do Red Team, o primeiro passo para comprometer um ambiente Azure é conseguir obter algumas credenciais para Azure AD. Aqui estão algumas ideias de como fazer isso:

  • Leaks no github (ou similar) - OSINT

  • Engenharia Social

  • Reutilização de senhas (password leaks)

  • Vulnerabilidades em Aplicações Hospedadas no Azure

  • Server Side Request Forgery com acesso ao endpoint de metadados

  • Leitura de Arquivo Local

  • /home/USERNAME/.azure

  • C:\Users\USERNAME\.azure

  • O arquivo accessTokens.json no az cli antes da versão 2.30 - Jan2022 - armazenava tokens de acesso em texto claro

  • O arquivo azureProfile.json contém informações sobre o usuário logado.

  • az logout remove o token.

  • Versões mais antigas do Az PowerShell armazenavam tokens de acesso em texto claro no TokenCache.dat. Também armazena ServicePrincipalSecret em texto claro no AzureRmContext.json. O cmdlet Save-AzContext pode ser usado para armazenar tokens. Use Disconnect-AzAccount para removê-los.

  • 3rd parties comprometidos

  • Funcionário interno

  • Phishing Comum (credenciais ou App Oauth)

Mesmo que você não tenha comprometido nenhum usuário dentro do tenant Azure que está atacando, você pode coletar algumas informações dele:

Az - Unauthenticated Enum & Initial Entry

Depois de conseguir obter credenciais, você precisa saber a quem essas credenciais pertencem, e a que elas têm acesso, então você precisa realizar alguma enumeração básica:

Enumeração Básica

Lembre-se que a parte mais ruidosa da enumeração é o login, não a enumeração em si.

SSRF

Se você encontrou um SSRF em uma máquina dentro do Azure, verifique esta página para truques:

Bypass de Condições de Login

Em casos onde você tem algumas credenciais válidas, mas não consegue fazer login, estas são algumas proteções comuns que podem estar em vigor:

  • IP whitelisting -- Você precisa comprometer um IP válido

  • Restrições geográficas -- Descubra onde o usuário mora ou onde estão os escritórios da empresa e obtenha um IP da mesma cidade (ou pelo menos do mesmo país)

  • Navegador -- Talvez apenas um navegador de um certo sistema operacional (Windows, Linux, Mac, Android, iOS) seja permitido. Descubra qual sistema operacional a vítima/empresa usa.

  • Você também pode tentar comprometer credenciais de Service Principal pois geralmente são menos limitadas e seu login é menos revisado

Depois de contornar isso, você pode voltar à sua configuração inicial e ainda terá acesso.

Subdomain Takeover

Whoami

Aprenda como instalar az cli, AzureAD e Az PowerShell na seção Az - AzureAD.

Uma das primeiras coisas que você precisa saber é quem você é (em qual ambiente você está):

az account list
az account tenant list # Current tenant info
az account subscription list # Current subscription info
az ad signed-in-user show # Current signed-in user
az ad signed-in-user list-owned-objects # Get owned objects by current user
az account management-group list #Not allowed by default

Um dos comandos mais importantes para enumerar Azure é Get-AzResource do Az PowerShell, pois permite saber os recursos que seu usuário atual tem visibilidade.

Você pode obter as mesmas informações na console web acessando https://portal.azure.com/#view/HubsExtension/BrowseAll ou procurando por "All resources"

AzureAD Enumeration

Por padrão, qualquer usuário deve ter permissões suficientes para enumerar coisas como usuários, grupos, funções, service principals... (verifique permissões padrão do AzureAD). Você pode encontrar aqui um guia:

Az - AzureAD (AAD)

Agora que você tem algumas informações sobre suas credenciais (e se você é um red team, espero que não tenha sido detectado). É hora de descobrir quais serviços estão sendo usados no ambiente. Na seção a seguir, você pode verificar algumas maneiras de enumerar alguns serviços comuns.

Service Principal and Access Policy

Um serviço Azure pode ter uma Identidade de Sistema (do próprio serviço) ou usar uma Identidade Gerenciada Atribuída ao Usuário. Esta Identidade pode ter uma Política de Acesso para, por exemplo, um KeyVault para ler segredos. Essas Políticas de Acesso devem ser restritas (princípio do menor privilégio), mas podem ter mais permissões do que o necessário. Tipicamente, um App Service usaria KeyVault para recuperar segredos e certificados.

Portanto, é útil explorar essas identidades.

App Service SCM

Console Kudu para fazer login no 'container' do App Service.

Webshell

Use portal.azure.com e selecione o shell, ou use shell.azure.com, para um bash ou powershell. O 'disco' deste shell é armazenado como um arquivo de imagem em uma storage-account.

Azure DevOps

Azure DevOps é separado do Azure. Ele possui repositórios, pipelines (yaml ou release), boards, wiki e mais. Grupos de Variáveis são usados para armazenar valores de variáveis e segredos.

Automated Recon Tools

cd ROADTools
pipenv shell
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
roadrecon gather
roadrecon gui

Import-Module monkey365
Get-Help Invoke-Monkey365
Get-Help Invoke-Monkey365 -Detailed
Invoke-Monkey365 -IncludeAzureActiveDirectory -ExportTo HTML -Verbose -Debug -InformationAction Continue
Invoke-Monkey365 - Instance Azure -Analysis All -ExportTo HTML

# Start Backend
cd stormspotter\backend\
pipenv shell
python ssbackend.pyz

# Start Front-end
cd stormspotter\frontend\dist\spa\
quasar.cmd serve -p 9091 --history

# Run Stormcollector
cd stormspotter\stormcollector\
pipenv shell
az login -u test@corp.onmicrosoft.com -p Welcome2022!
python stormspotter\stormcollector\sscollector.pyz cli
# This will generate a .zip file to upload in the frontend (127.0.0.1:9091)

AzureHound é uma ferramenta usada para coletar informações de um ambiente Azure AD. Ele coleta dados sobre usuários, grupos, aplicativos, permissões e muito mais. Esses dados podem ser analisados usando o BloodHound para identificar caminhos de ataque e potenciais vulnerabilidades.

MicroBurst é uma coleção de scripts PowerShell que ajudam na enumeração e exploração de ambientes Azure. Ele inclui funcionalidades para enumeração de serviços, coleta de credenciais e execução de ataques.

Stormspotter é uma ferramenta de mapeamento de ataque para ambientes Azure. Ele cria um gráfico visual das relações entre recursos no Azure, ajudando a identificar caminhos de ataque e pontos fracos na configuração de segurança.

PowerZure é uma ferramenta de pós-exploração para ambientes Azure. Ele permite que os pentesters realizem várias ações, como enumeração de recursos, coleta de credenciais e execução de comandos em máquinas virtuais.

ROADtools é um conjunto de ferramentas para interagir com o Azure AD. Ele inclui funcionalidades para autenticação, enumeração de diretórios e manipulação de objetos no Azure AD.

AADInternals é um módulo PowerShell para testar a segurança do Azure AD. Ele inclui funcionalidades para enumeração de usuários, grupos e aplicativos, bem como para exploração de vulnerabilidades conhecidas.

MSOLSpray é uma ferramenta para realizar ataques de password spraying contra o Azure AD. Ele tenta autenticar com várias combinações de nomes de usuário e senhas para identificar credenciais válidas.

Azucar é uma ferramenta de auditoria de segurança para ambientes Azure. Ele coleta informações sobre a configuração de segurança e gera relatórios detalhados sobre potenciais vulnerabilidades e recomendações de mitigação.

Azucar é uma ferramenta de auditoria de segurança para ambientes Azure. Ele coleta informações sobre a configuração de segurança e gera relatórios detalhados sobre potenciais vulnerabilidades e recomendações de mitigação.

Azucar é uma ferramenta de auditoria de segurança para ambientes Azure. Ele coleta informações sobre a configuração de segurança e gera relatórios detalhados sobre potenciais vulnerabilidades e recomendações de mitigação.

# You need to use the Az PowerShell and Azure AD modules:
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ("test@corp.onmicrosoft.com", $passwd)
Connect-AzAccount -Credential $creds

Import-Module AzureAD\AzureAD.psd1
Connect-AzureAD -Credential $creds

# Launch AzureHound
. AzureHound\AzureHound.ps1
Invoke-AzureHound -Verbose

# Simple queries
## All Azure Users
MATCH (n:AZUser) return n.name
## All Azure Applications
MATCH (n:AZApp) return n.objectid
## All Azure Devices
MATCH (n:AZDevice) return n.name
## All Azure Groups
MATCH (n:AZGroup) return n.name
## All Azure Key Vaults
MATCH (n:AZKeyVault) return n.name
## All Azure Resource Groups
MATCH (n:AZResourceGroup) return n.name
## All Azure Service Principals
MATCH (n:AZServicePrincipal) return n.objectid
## All Azure Virtual Machines
MATCH (n:AZVM) return n.name
## All Principals with the ‘Contributor’ role
MATCH p = (n)-[r:AZContributor]->(g) RETURN p

# Advanced queries
## Get Global Admins
MATCH p =(n)-[r:AZGlobalAdmin*1..]->(m) RETURN p
## Owners of Azure Groups
MATCH p = (n)-[r:AZOwns]->(g:AZGroup) RETURN p
## All Azure Users and their Groups
MATCH p=(m:AZUser)-[r:MemberOf]->(n) WHERE NOT m.objectid CONTAINS 'S-1-5' RETURN p
## Privileged Service Principals
MATCH p = (g:AZServicePrincipal)-[r]->(n) RETURN p
## Owners of Azure Applications
MATCH p = (n)-[r:AZOwns]->(g:AZApp) RETURN p
## Paths to VMs
MATCH p = (n)-[r]->(g: AZVM) RETURN p
## Paths to KeyVault
MATCH p = (n)-[r]->(g:AZKeyVault) RETURN p
## Paths to Azure Resource Group
MATCH p = (n)-[r]->(g:AZResourceGroup) RETURN p
## On-Prem users with edges to Azure
MATCH  p=(m:User)-[r:AZResetPassword|AZOwns|AZUserAccessAdministrator|AZContributor|AZAddMembers|AZGlobalAdmin|AZVMContributor|AZOwnsAZAvereContributor]->(n) WHERE m.objectid CONTAINS 'S-1-5-21' RETURN p
## All Azure AD Groups that are synchronized with On-Premise AD
MATCH (n:Group) WHERE n.objectid CONTAINS 'S-1-5' AND n.azsyncid IS NOT NULL RETURN n

# You should use an account with at least read-permission on the assets you want to access
git clone https://github.com/nccgroup/azucar.git
PS> Get-ChildItem -Recurse c:\Azucar_V10 | Unblock-File

PS> .\Azucar.ps1 -AuthMode UseCachedCredentials -Verbose -WriteLog -Debug -ExportTo PRINT
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -CertFilePassword MySuperP@ssw0rd! -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000

# resolve the TenantID for an specific username
PS> .\Azucar.ps1 -ResolveTenantUserName user@company.com

Import-Module .\MicroBurst.psm1
Import-Module .\Get-AzureDomainInfo.ps1
Get-AzureDomainInfo -folder MicroBurst -Verbose

Connect-AzAccount
ipmo C:\Path\To\Powerzure.psd1
Get-AzureTarget

# Reader
$ Get-Runbook, Get-AllUsers, Get-Apps, Get-Resources, Get-WebApps, Get-WebAppDetails

# Contributor
$ Execute-Command -OS Windows -VM Win10Test -ResourceGroup Test-RG -Command "whoami"
$ Execute-MSBuild -VM Win10Test  -ResourceGroup Test-RG -File "build.xml"
$ Get-AllSecrets # AllAppSecrets, AllKeyVaultContents
$ Get-AvailableVMDisks, Get-VMDisk # Download a virtual machine's disk

# Owner
$ Set-Role -Role Contributor -User test@contoso.com -Resource Win10VMTest

# Administrator
$ Create-Backdoor, Execute-Backdoor
Suporte HackTricks

Last updated