From e42415e05747134083202420c974c7aafec879e8 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 26 May 2026 19:12:20 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/azure-security/az-enumeration-tool --- .../azure-security/az-enumeration-tools.md | 261 ++++++++++-------- 1 file changed, 152 insertions(+), 109 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-enumeration-tools.md b/src/pentesting-cloud/azure-security/az-enumeration-tools.md index 66c2c03eb..13d1a7f20 100644 --- a/src/pentesting-cloud/azure-security/az-enumeration-tools.md +++ b/src/pentesting-cloud/azure-security/az-enumeration-tools.md @@ -1,11 +1,11 @@ -# Az - Enumeration Tools +# Az - Ferramentas de Enumeration {{#include ../../banners/hacktricks-training.md}} -## Instalar PowerShell no linux +## Instalar PowerShell no Linux > [!TIP] -> No linux você precisará instalar PowerShell Core: +> No linux você precisará instalar o PowerShell Core: ```bash sudo apt-get update sudo apt-get install -y wget apt-transport-https software-properties-common @@ -26,7 +26,7 @@ curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash ``` ## Instalar PowerShell no MacOS -Instruções da [**documentação**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4): +Instruções da [**documentation**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4): 1. Instale `brew` se ainda não estiver instalado: ```bash @@ -36,7 +36,7 @@ Instruções da [**documentação**](https://learn.microsoft.com/en-us/powershel ```sh brew install powershell/tap/powershell ``` -3. Execute o PowerShell: +3. Execute PowerShell: ```sh pwsh ``` @@ -45,23 +45,23 @@ pwsh brew update brew upgrade powershell ``` -## Ferramentas principais de enumeração +## Main Enumeration Tools ### az cli -[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) é uma ferramenta multiplataforma escrita em Python para gerenciar e administrar (a maioria dos) recursos do Azure e do Entra ID. Ela se conecta ao Azure e executa comandos administrativos via linha de comando ou scripts. +[**Azure Command-Line Interface (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) é uma ferramenta cross-platform escrita em Python para gerenciar e administrar (a maioria dos) recursos do Azure e Entra ID. Ela se conecta ao Azure e executa comandos administrativos via command line ou scripts. -Siga este link para as [**instruções de instalação**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install). +Siga este link para as [**installation instructions¡**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install). -Os comandos no Azure CLI seguem o padrão: `az ` +Os comandos no Azure CLI são estruturados usando o padrão: `az ` -#### Depuração | MitM az cli +#### Debug | MitM az cli -Usando o parâmetro **`--debug`** é possível ver todas as requisições que a ferramenta **`az`** está enviando: +Usando o parâmetro **`--debug`** é possível ver todas as requests que a ferramenta **`az`** está enviando: ```bash az account management-group list --output table --debug ``` -Para realizar um **MitM** na ferramenta e **verificar todas as requisições** que ela está enviando manualmente, você pode fazer: +Para fazer um **MitM** ao tool e **verificar manualmente todas as requests** que ele está enviando, você pode fazer: {{#tabs }} {{#tab name="Bash" }} @@ -105,32 +105,32 @@ $env:HTTP_PROXY="http://127.0.0.1:8080" {{#endtabs }}
-Fixing “CA cert does not include key usage extension” +Corrigindo “CA cert does not include key usage extension” ### Por que o erro acontece -When Azure CLI authenticates, it makes HTTPS requests (via MSAL → Requests → OpenSSL). If you’re intercepting TLS with Burp, Burp generates “on the fly” certificates for sites like `login.microsoftonline.com` and signs them with Burp’s CA. +Quando o Azure CLI autentica, ele faz requisições HTTPS (via MSAL → Requests → OpenSSL). Se você estiver interceptando TLS com Burp, o Burp gera certificados “on the fly” para sites como `login.microsoftonline.com` e os assina com a CA do Burp. -Em stacks mais recentes (Python 3.13 + OpenSSL 3), a validação de CA é mais rígida: +Em stacks mais novas (Python 3.13 + OpenSSL 3), a validação de CA é mais rígida: -- Um certificado CA deve incluir **Basic Constraints: `CA:TRUE`** e uma extensão **Key Usage** permitindo assinatura de certificados (**`keyCertSign`**, e tipicamente **`cRLSign`**). +- Um certificado de CA deve incluir **Basic Constraints: `CA:TRUE`** e uma extensão **Key Usage** permitindo assinatura de certificados (**`keyCertSign`**, e normalmente **`cRLSign`**). -A CA padrão do Burp (PortSwigger CA) é antiga e tipicamente não contém a extensão Key Usage, então o OpenSSL a rejeita mesmo se você a “trust it”. +A CA padrão do Burp (PortSwigger CA) é antiga e normalmente não tem a extensão Key Usage, então o OpenSSL a rejeita mesmo que você “confie” nela. -Isso produz erros como: +Isso gera erros como: - `CA cert does not include key usage extension` - `CERTIFICATE_VERIFY_FAILED` - `self-signed certificate in certificate chain` -Portanto você deve: +Então você precisa: -1. Criar uma CA moderna (com o Key Usage correto). -2. Fazer com que o Burp a utilize para assinar os certificados interceptados. +1. Criar uma CA moderna (com Key Usage correta). +2. Fazer o Burp usá-la para assinar os certificados interceptados. 3. Confiar nessa CA no macOS. -4. Apontar o Azure CLI / Requests para esse CA bundle. +4. Apontar o Azure CLI / Requests para esse bundle de CA. -### Passo a passo: configuração funcional +### Configuração passo a passo: funcionando #### 0) Pré-requisitos @@ -138,9 +138,9 @@ Portanto você deve: - Azure CLI instalado (Homebrew) - Você pode usar `sudo` (para confiar na CA no keychain do sistema) -#### 1) Create a standards-compliant Burp CA (PEM + KEY) +#### 1) Criar uma Burp CA compatível com o padrão (PEM + KEY) -Create an OpenSSL config file that explicitly sets CA extensions: +Crie um arquivo de configuração do OpenSSL que defina explicitamente as extensões da CA: ```bash mkdir -p ~/burp-ca && cd ~/burp-ca @@ -164,7 +164,7 @@ subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer EOF ``` -Gerar o certificado CA + chave privada: +Gere o certificado CA + chave privada: ```bash openssl req -x509 -new -nodes \ -days 3650 \ @@ -172,18 +172,16 @@ openssl req -x509 -new -nodes \ -out burp-ca.pem \ -config burp-ca.cnf ``` -Verificação de sanidade (você DEVE ver Key Usage): +Sanity check (você DEVE ver Key Usage): ```bash openssl x509 -in burp-ca.pem -noout -text | egrep -A3 "Basic Constraints|Key Usage" ``` -Espera-se que inclua algo como: - - `CA:TRUE` - `Key Usage: ... Certificate Sign, CRL Sign` #### 2) Converter para PKCS#12 (formato de importação do Burp) -O Burp precisa de certificado + chave privada; o mais simples é como PKCS#12: +Burp precisa de certificado + private key, o mais fácil é como PKCS#12: ```bash openssl pkcs12 -export \ -out burp-ca.p12 \ @@ -191,50 +189,50 @@ openssl pkcs12 -export \ -in burp-ca.pem \ -name "Burp Custom Root CA" ``` -Você será solicitado a inserir uma senha de exportação (defina uma; o Burp irá solicitá-la). +Você será solicitado a definir uma senha de exportação (defina uma; o Burp pedirá por ela). #### 3) Importe a CA no Burp e reinicie o Burp No Burp: - Proxy → Options -- Find Import / export CA certificate -- Click Import CA certificate -- Choose PKCS#12 -- Select `burp-ca.p12` -- Enter the password -- Restart Burp completely (important) +- Encontre Import / export CA certificate +- Clique em Import CA certificate +- Escolha PKCS#12 +- Selecione `burp-ca.p12` +- Digite a senha +- Reinicie o Burp completamente (importante) -Por que reiniciar? O Burp pode continuar usando a CA antiga até ser reiniciado. +Por que reiniciar? O Burp pode continuar usando a CA antiga até reiniciar. -#### 4) Confie na nova CA no keychain do sistema macOS +#### 4) Confie na nova CA no macOS system keychain -Isso permite que aplicativos do sistema e muitas pilhas TLS confiem na CA. +Isso permite que system apps e muitas TLS stacks confiem na CA. ```bash sudo security add-trusted-cert \ -d -r trustRoot \ -k /Library/Keychains/System.keychain \ ~/burp-ca/burp-ca.pem ``` -(Se preferir GUI: Keychain Access → System → Certificates → import → set “Always Trust”.) +(Se preferir GUI: Keychain Access → System → Certificates → import → defina “Always Trust”.) -#### 5) Configurar variáveis de ambiente do proxy +#### 5) Configure proxy env vars ```bash export HTTPS_PROXY="http://127.0.0.1:8080" export HTTP_PROXY="http://127.0.0.1:8080" ``` -#### 6) Configure Requests/Azure CLI para confiar no seu Burp CA +#### 6) Configurar Requests/Azure CLI para confiar na sua CA do Burp -Azure CLI usa Python Requests internamente; configure ambos: +Azure CLI usa Python Requests internamente; defina ambos: ```bash export REQUESTS_CA_BUNDLE="$HOME/burp-ca/burp-ca.pem" export SSL_CERT_FILE="$HOME/burp-ca/burp-ca.pem" ``` Notas: -- `REQUESTS_CA_BUNDLE` é usado pelo Requests. -- `SSL_CERT_FILE` ajuda com outros consumidores de TLS e casos de borda. -- Normalmente você não precisa mais do antigo `ADAL_PYTHON_SSL_NO_VERIFY` / `AZURE_CLI_DISABLE_CONNECTION_VERIFICATION` uma vez que a CA esteja correta. +- `REQUESTS_CA_BUNDLE` é usado por Requests. +- `SSL_CERT_FILE` ajuda outros consumidores de TLS e casos de borda. +- Normalmente, você não precisa mais do antigo `ADAL_PYTHON_SSL_NO_VERIFY` / `AZURE_CLI_DISABLE_CONNECTION_VERIFICATION` depois que a CA está correta. #### 7) Verifique se o Burp está realmente assinando com sua nova CA (verificação crítica) @@ -244,9 +242,11 @@ openssl s_client -connect login.microsoftonline.com:443 \ -proxy 127.0.0.1:8080 /dev/null \ | openssl x509 -noout -issuer ``` -O emissor esperado contém o nome da sua CA, por exemplo: `O=Burp Custom CA, CN=Burp Custom Root CA` +Expected issuer contains your CA name, e.g.: -Se você ainda vê PortSwigger CA, Burp não está usando sua CA importada → verifique novamente a importação e reinicie. +`O=Burp Custom CA, CN=Burp Custom Root CA` + +Se você ainda vir PortSwigger CA, o Burp não está usando a sua CA importada → verifique novamente a importação e reinicie. #### 8) Verifique se Python Requests funciona através do Burp ```bash @@ -256,61 +256,59 @@ requests.get("https://login.microsoftonline.com") print("OK") EOF ``` -Esperado: `OK` - -#### 9) Teste do Azure CLI +OK ```bash az account get-access-token --resource=https://management.azure.com/ ``` -Se você já estiver logado, deve retornar JSON com um `accessToken`. +Se você já estiver autenticado, ele deve retornar JSON com um `accessToken`.
### Az PowerShell -Azure PowerShell é um módulo com cmdlets para gerenciar Azure resources diretamente a partir da linha de comando do PowerShell. +Azure PowerShell é um módulo com cmdlets para gerenciar recursos Azure diretamente da linha de comando do PowerShell. -Follow this link for the [**installation instructions**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell). +Acesse este link para as [**installation instructions**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell). -Commands in Azure PowerShell AZ Module are structured like: `-Az ` +Os comandos no Azure PowerShell AZ Module são estruturados assim: `-Az ` #### Debug | MitM Az PowerShell -Usando o parâmetro **`-Debug`** é possível ver todas as requisições que a ferramenta está enviando: +Usando o parâmetro **`-Debug`**, é possível ver todas as requests que a tool está enviando: ```bash Get-AzResourceGroup -Debug ``` -In order to do a **MitM** to the tool and **check all the requests** it's sending manually you can set the env variables `HTTPS_PROXY` and `HTTP_PROXY` according to the [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy). +Para fazer um **MitM** com a ferramenta e **verificar manualmente todas as requests** que ela está enviando, você pode definir as variáveis de ambiente `HTTPS_PROXY` e `HTTP_PROXY` de acordo com a [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy). ### Microsoft Graph PowerShell -Microsoft Graph PowerShell é um SDK multiplataforma que permite acesso a todas as Microsoft Graph APIs, incluindo serviços como SharePoint, Exchange e Outlook, usando um único endpoint. Ele suporta PowerShell 7+, autenticação moderna via MSAL, identidades externas e consultas avançadas. Com foco no princípio do menor privilégio, garante operações seguras e recebe atualizações regulares para alinhar-se com as últimas funcionalidades da Microsoft Graph API. +Microsoft Graph PowerShell é um SDK multiplataforma que permite acesso a todas as Microsoft Graph APIs, incluindo serviços como SharePoint, Exchange e Outlook, usando um único endpoint. Ele oferece suporte a PowerShell 7+, modern authentication via MSAL, external identities e advanced queries. Com foco em least privilege access, ele garante operações seguras e recebe atualizações regulares para acompanhar os recursos mais recentes da Microsoft Graph API. -Follow this link for the [**installation instructions**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation). +Siga este link para as [**installation instructions**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation). -Commands in Microsoft Graph PowerShell are structured like: `-Mg ` +Os comandos no Microsoft Graph PowerShell são estruturados assim: `-Mg ` #### Debug Microsoft Graph PowerShell -Using the parameter **`-Debug`** it's possible to see all the requests the tool is sending: +Usando o parâmetro **`-Debug`**, é possível ver todas as requests que a ferramenta está enviando: ```bash Get-MgUser -Debug ``` ### ~~**AzureAD Powershell**~~ -O módulo Azure Active Directory (AD), agora **descontinuado**, faz parte do Azure PowerShell para gerenciar recursos do Azure AD. Ele fornece cmdlets para tarefas como gerenciar usuários, grupos e registros de aplicativo no Entra ID. +O módulo Azure Active Directory (AD), agora **deprecated**, faz parte do Azure PowerShell para gerenciar recursos do Azure AD. Ele fornece cmdlets para tarefas como gerenciar users, groups e application registrations no Entra ID. > [!TIP] -> Isso foi substituído pelo Microsoft Graph PowerShell +> Isso é substituído por Microsoft Graph PowerShell -Siga este link para as [**instruções de instalação**](https://www.powershellgallery.com/packages/AzureAD). +Siga este link para as [**installation instructions**](https://www.powershellgallery.com/packages/AzureAD). -## Automated Recon & Compliance Tools +## Ferramentas Automatizadas de Recon & Compliance ### [turbot azure plugins](https://github.com/orgs/turbot/repositories?q=mod-azure) -Turbot com steampipe e powerpipe permite coletar informações do Azure e Entra ID, executar verificações de conformidade e encontrar configurações incorretas. Os módulos Azure atualmente mais recomendados para executar são: +Turbot com steampipe e powerpipe permite coletar informações do Azure e do Entra ID e executar checks de compliance e encontrar misconfigurations. Os módulos Azure atualmente mais recomendados para executar são: - [https://github.com/turbot/steampipe-mod-azure-compliance](https://github.com/turbot/steampipe-mod-azure-compliance) - [https://github.com/turbot/steampipe-mod-azure-insights](https://github.com/turbot/steampipe-mod-azure-insights) @@ -341,9 +339,9 @@ powerpipe server ``` ### [Prowler](https://github.com/prowler-cloud/prowler) -Prowler é uma ferramenta de segurança de código aberto para realizar avaliações de melhores práticas de segurança, auditorias, resposta a incidentes, monitoramento contínuo, hardening e preparação para forense em AWS, Azure, Google Cloud e Kubernetes. +Prowler é uma ferramenta de segurança Open Source para realizar avaliações, auditorias, response a incidentes, continuous monitoring, hardening e forensics readiness de best practices de segurança para AWS, Azure, Google Cloud e Kubernetes. -Basicamente permite executar centenas de verificações contra um ambiente Azure para encontrar configurações incorretas de segurança e coletar os resultados em json (e outros formatos de texto) ou consultá-los na web. +Basicamente, ele nos permite executar centenas de checks contra um ambiente Azure para encontrar misconfigurations de segurança e coletar os resultados em json (e outros formatos de texto) ou verificá-los na web. ```bash # Create a application with Reader role and set the tenant ID, client ID and secret in prowler so it access the app @@ -365,9 +363,9 @@ docker run --rm -e "AZURE_CLIENT_ID=" -e "AZURE_TENANT_ID= ``` ### [Monkey365](https://github.com/silverhack/monkey365) -Permite realizar automaticamente revisões de configuração de segurança de assinaturas do Azure e do Microsoft Entra ID. +Ele permite realizar revisões automáticas da configuração de segurança de assinaturas Azure e Microsoft Entra ID. -Os relatórios HTML são armazenados no diretório `./monkey-reports` dentro da pasta do repositório do github. +Os relatórios HTML são armazenados dentro do diretório `./monkey-reports` dentro da pasta do repositório github. ```bash git clone https://github.com/silverhack/monkey365 Get-ChildItem -Recurse monkey365 | Unblock-File @@ -388,7 +386,7 @@ Invoke-Monkey365 -TenantId -ClientId -ClientSecret $Secu ``` ### [ScoutSuite](https://github.com/nccgroup/ScoutSuite) -Scout Suite coleta dados de configuração para inspeção manual e destaca áreas de risco. É uma ferramenta de auditoria de segurança multi-cloud, que possibilita a avaliação da postura de segurança de ambientes em nuvem. +Scout Suite coleta dados de configuração para inspeção manual e destaca áreas de risco. É uma ferramenta multi-cloud de auditoria de segurança, que permite a avaliação da postura de segurança de ambientes cloud. ```bash virtualenv -p python3 venv source venv/bin/activate @@ -404,18 +402,26 @@ python scout.py azure --cli ``` ### [Azure-MG-Sub-Governance-Reporting](https://github.com/JulianHayward/Azure-MG-Sub-Governance-Reporting) -É um script powershell que ajuda você a **visualizar todos os recursos e permissões dentro de um Management Group e do Entra ID** tenant e a encontrar misconfigurações de segurança. +É um script powershell que ajuda a **visualizar todos os resources e permissions dentro de um Management Group e do tenant Entra ID** e encontrar misconfigurations de security. -Ele funciona usando o Az PowerShell module, portanto qualquer autenticação suportada por esse módulo é suportada pela ferramenta. +Funciona usando o módulo Az PowerShell, então qualquer authentication suportada por essa tool é suportada pela tool. ```bash import-module Az .\AzGovVizParallel.ps1 -ManagementGroupId [-SubscriptionIdWhitelist ] ``` -## Ferramentas automatizadas de pós-exploração +## Ferramentas automatizadas de Post-Exploitation -### [**ROADRecon**](https://github.com/dirkjanm/ROADtools) +### [**ROADtools**](https://github.com/dirkjanm/ROADtools) / ROADrecon / ROADtx -A enumeração do ROADRecon fornece informações sobre a configuração do Entra ID, como usuários, grupos, funções, políticas de acesso condicional... +ROADtools é um dos principais frameworks open-source para pesquisa ofensiva em Entra ID. Os componentes mais relevantes são: + +- **`roadrecon`**: descoberta do tenant e geração de dataset local (users, groups, roles, devices, service principals, applications, directory settings). +- **`roadtx`**: aquisição/troca de token, reutilização de refresh-token, registro de dispositivo e workflows de PRT. +- **`roadlib`**: biblioteca de auth/API de nível mais baixo usada pelos outros módulos. + +Os dados coletados são armazenados em um banco de dados SQLite local e podem ser explorados na interface web do ROADrecon, o que é útil para mapear usuários privilegiados, atribuições de roles, devices, service principals e relações de applications antes de planejar persistence ou lateral movement. + +#### Coleta do ROADrecon ```bash cd ROADTools pipenv shell @@ -426,19 +432,52 @@ roadrecon auth --as-app --client "" --password "" --tenant "< roadrecon gather roadrecon gui ``` +ROADrecon originalmente visava o Azure AD Graph. Em **22 de maio de 2026**, o repositório oficial ainda mantém suporte ao Microsoft Graph na branch **`msgraph`**, e forks da comunidade, como **Tom2Byrne/ROADtools**, continuam atualizando a coleta baseada em Graph. Em builds compatíveis com Graph, o ROADrecon adiciona o switch **`-mg`** para enumerar endpoints como **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`** e **`/applications`**. +```bash +# Graph-capable ROADrecon builds +roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!" +roadrecon gather -mg +roadrecon gui +``` +#### ROADtx high-value use cases + +Se você já tem credenciais válidas, um refresh token, ou uma sessão derivada de PRT, o ROADtx é comumente usado para: + +- **Register a rogue Entra ID device** contra **`urn:ms-drs:enterpriseregistration.windows.net`** para obter device keys/certificates e criar acesso durável com base em device. +- **Exchange/reuse refresh tokens** para obter novos tokens do Microsoft Graph ou de outros recursos sem repetir o sign-in interativo. +- **Abuse PRT workflows** para gerar silenciosamente novos access tokens em segundo plano. + +Uma pista útil de hunting é que os valores padrão de **`roadtx device`** historicamente têm sido: + +- **OS**: `Windows` +- **OS version**: `10.0.19041.928` +- **Name**: `DESKTOP-` + +Esses valores são fáceis de alterar, então trate-os como **weak indicators**. Eles ainda são úteis quando correlacionados com eventos incomuns de registro de device, padrões de nomenclatura não corporativos, IPs/geos/ASNs de origem suspeitos, ou user agents scriptados. + +#### ROADtools opsec / hunting notes + +Como o ROADtools usa APIs legítimas de identidade da Microsoft, defensores devem hunting pela **combinação** de atividade de tokens, padrões de enumeração e anomalias de user-agent em vez de esperar assinaturas parecidas com malware. Sinais úteis incluem: + +- Operações de auditoria de **Device registration** como `Add device`, `Add registered owner to device`, `Add registered user to device`, e `Register device` +- Requests ou sign-ins ligados ao **Device Registration Service** +- User agents com aparência de script como **`python-requests`**, **`urllib`**, ou **`curl`** +- Leituras em rajada do Microsoft Graph contra endpoints com muita descoberta, como **`/users`**, **`/groups`**, **`/devices`**, **`/servicePrincipals`**, e **`/applications`** +- Escopos OAuth poderosos aparecendo em dados de auditoria, especialmente **`Directory.ReadWrite.All`**, **`Device.ReadWrite.All`**, **`Application.ReadWrite.All`**, **`AuditLog.ReadWrite.All`**, e **`Policy.ReadWrite.All`** + ### [**AzureHound**](https://github.com/BloodHoundAD/AzureHound) -AzureHound é o coletor do BloodHound para Microsoft Entra ID e Azure. É um único binário Go estático para Windows/Linux/macOS que se comunica diretamente com: -- Microsoft Graph (Entra ID directory, M365) and +AzureHound é o collector do BloodHound para Microsoft Entra ID e Azure. É um binário Go estático único para Windows/Linux/macOS que fala diretamente com: +- Microsoft Graph (Entra ID directory, M365) e - Azure Resource Manager (ARM) control plane (subscriptions, resource groups, compute, storage, key vault, app services, AKS, etc.) -Key traits -- Executa de qualquer lugar na internet pública contra as tenant APIs (não requer acesso à rede interna) -- Produz JSON para ingestão pelo BloodHound CE para visualizar attack paths entre identidades e recursos em cloud -- User-Agent padrão observado: azurehound/v2.x.x +Principais características +- Executa de qualquer lugar na internet pública contra as APIs do tenant (não requer acesso à rede interna) +- Gera JSON para ingestão no BloodHound CE para visualizar attack paths entre identities e cloud resources +- Default User-Agent observado: azurehound/v2.x.x -Authentication options -- Usuário + senha: -u -p +Opções de autenticação +- Username + password: -u -p - Refresh token: --refresh-token - JSON Web Token (access token): --jwt - Service principal secret: -a -s @@ -479,37 +518,37 @@ azurehound list storage-containers -t "" -o containers.json azurehound list web-apps -t "" -o webapps.json azurehound list function-apps -t "" -o funcapps.json ``` -What gets queried -- Graph endpoints (examples): +O que é consultado +- Endpoints do Graph (exemplos): - /v1.0/organization, /v1.0/users, /v1.0/groups, /v1.0/roleManagement/directory/roleDefinitions, directoryRoles, owners/members -- ARM endpoints (examples): +- Endpoints do ARM (exemplos): - management.azure.com/subscriptions/.../providers/Microsoft.Storage/storageAccounts - .../Microsoft.KeyVault/vaults, .../Microsoft.Compute/virtualMachines, .../Microsoft.Web/sites, .../Microsoft.ContainerService/managedClusters -Preflight behavior and endpoints -- Each azurehound list typically performs these test calls before enumeration: -1) Identity platform: login.microsoftonline.com +Comportamento e endpoints de preflight +- Cada azurehound list normalmente executa estas chamadas de teste antes da enumeration: +1) Plataforma de identidade: login.microsoftonline.com 2) Graph: GET https://graph.microsoft.com/v1.0/organization 3) ARM: GET https://management.azure.com/subscriptions?api-version=... -- Cloud environment base URLs differ for Government/China/Germany. See constants/environments.go in the repo. +- As base URLs do ambiente cloud diferem para Government/China/Germany. Veja constants/environments.go no repo. -ARM-heavy objects (less visible in Activity/Resource logs) -- The following list targets predominantly use ARM control plane reads: automation-accounts, container-registries, function-apps, key-vaults, logic-apps, managed-clusters, management-groups, resource-groups, storage-accounts, storage-containers, virtual-machines, vm-scale-sets, web-apps. -- These GET/list operations are typically not written to Activity Logs; data-plane reads (e.g., *.blob.core.windows.net, *.vault.azure.net) are covered by Diagnostic Settings at the resource level. +Objetos ARM-heavy (menos visíveis em Activity/Resource logs) +- A seguinte lista de alvos usa predominantemente leituras do ARM control plane: automation-accounts, container-registries, function-apps, key-vaults, logic-apps, managed-clusters, management-groups, resource-groups, storage-accounts, storage-containers, virtual-machines, vm-scale-sets, web-apps. +- Essas operações GET/list normalmente não são escritas em Activity Logs; leituras de data-plane (por exemplo, *.blob.core.windows.net, *.vault.azure.net) são cobertas por Diagnostic Settings no nível do resource. -OPSEC and logging notes -- Microsoft Graph Activity Logs are not enabled by default; enable and export to SIEM to gain visibility of Graph calls. Expect the Graph preflight GET /v1.0/organization with UA azurehound/v2.x.x. -- Entra ID non-interactive sign-in logs record the identity platform auth (login.microsoftonline.com) used by AzureHound. -- ARM control-plane read/list operations are not recorded in Activity Logs; many azurehound list operations against resources won’t appear there. Only data-plane logging (via Diagnostic Settings) will capture reads to service endpoints. -- Defender XDR GraphApiAuditEvents (preview) can expose Graph calls and token identifiers but may lack UserAgent and have limited retention. +Notas de OPSEC e logging +- Microsoft Graph Activity Logs não estão habilitados por padrão; habilite e exporte para SIEM para obter visibilidade das chamadas do Graph. Espere o preflight do Graph GET /v1.0/organization com UA azurehound/v2.x.x. +- Entra ID non-interactive sign-in logs registram a autenticação da plataforma de identidade (login.microsoftonline.com) usada pelo AzureHound. +- Leituras/listagens do ARM control-plane não são registradas em Activity Logs; muitas operações do azurehound list contra resources não aparecerão ali. Apenas o logging de data-plane (via Diagnostic Settings) capturará leituras para service endpoints. +- Defender XDR GraphApiAuditEvents (preview) pode expor chamadas do Graph e identificadores de token, mas pode não incluir UserAgent e ter retenção limitada. -Tip: When enumerating for privilege paths, dump users, groups, roles, and role assignments, then ingest in BloodHound and use prebuilt cypher queries to surface Global Administrator/Privileged Role Administrator and transitive escalation via nested groups and RBAC assignments. +Dica: Ao enumeration para privilege paths, faça dump de users, groups, roles e role assignments, depois ingira no BloodHound e use queries cypher pré-construídas para identificar Global Administrator/Privileged Role Administrator e escalada transitiva via nested groups e RBAC assignments. -Launch the BloodHound web with `curl -L https://ghst.ly/getbhce | docker compose -f - up` and import the `output.json` file. Then, in the EXPLORE tab, in the CYPHER section you can see a folder icon that contains pre-built queries. +Inicie o BloodHound web com `curl -L https://ghst.ly/getbhce | docker compose -f - up` e importe o arquivo `output.json`. Depois, na aba EXPLORE, na seção CYPHER, você pode ver um ícone de pasta que contém queries pré-construídas. ### [**MicroBurst**](https://github.com/NetSPI/MicroBurst) -MicroBurst includes functions and scripts that support Azure Services discovery, weak configuration auditing, and post exploitation actions such as credential dumping. It is intended to be used during penetration tests where Azure is in use. +MicroBurst inclui functions e scripts que suportam discovery de Azure Services, auditoria de weak configuration e ações de post exploitation como credential dumping. Ele foi projetado para ser usado durante pentests onde Azure está em uso. ```bash Import-Module .\MicroBurst.psm1 Import-Module .\Get-AzureDomainInfo.ps1 @@ -517,9 +556,9 @@ Get-AzureDomainInfo -folder MicroBurst -Verbose ``` ### [**PowerZure**](https://github.com/hausec/PowerZure) -PowerZure foi criado devido à necessidade de um framework capaz de realizar tanto reconnaissance quanto exploitation do Azure, EntraID e dos recursos associados. +PowerZure foi criado a partir da necessidade de um framework que possa realizar tanto reconnaissance quanto exploitation do Azure, EntraID e dos recursos associados. -Ele usa o módulo **Az PowerShell**, então qualquer método de autenticação suportado por esse módulo será suportado pela ferramenta. +Ele usa o módulo **Az PowerShell**, então qualquer autenticação suportada por essa ferramenta também é suportada pela ferramenta. ```bash # Login Import-Module Az @@ -550,7 +589,7 @@ Invoke-AzureRunCommand -Command -VMName ``` ### [**GraphRunner**](https://github.com/dafthack/GraphRunner/wiki/Invoke%E2%80%90GraphRunner) -GraphRunner é um conjunto de ferramentas de post-exploitation para interagir com o Microsoft Graph API. Fornece várias ferramentas para realizar reconnaissance, persistence e pillaging de dados de uma conta do Microsoft Entra ID (Azure AD). +GraphRunner é um conjunto de ferramentas de post-exploitation para interagir com a Microsoft Graph API. Ele fornece várias ferramentas para realizar reconhecimento, persistência e pilhagem de dados de uma conta Microsoft Entra ID (Azure AD). ```bash #A good place to start is to authenticate with the Get-GraphTokens module. This module will launch a device-code login, allowing you to authenticate the session from a browser session. Access and refresh tokens will be written to the global $tokens variable. To use them with other GraphRunner modules use the Tokens flag (Example. Invoke-DumpApps -Tokens $tokens) Import-Module .\GraphRunner.ps1 @@ -594,9 +633,9 @@ Invoke-GraphRunner -Tokens $tokens ``` ### [Stormspotter](https://github.com/Azure/Stormspotter) -Stormspotter cria um “attack graph” dos recursos em uma assinatura do Azure. Ele permite que red teams e pentesters visualizem a superfície de ataque e oportunidades de pivot dentro de um tenant, e potencializa seus defenders para orientar-se rapidamente e priorizar o trabalho de incident response. +Stormspotter cria um “attack graph” dos recursos em uma assinatura do Azure. Ele permite que red teams e pentesters visualizem a attack surface e as oportunidades de pivot dentro de um tenant, e potencializa seus defensores para orientar-se rapidamente e priorizar o trabalho de resposta a incidentes. -**Infelizmente, parece não mantido**. +**Infelizmente, parece estar sem manutenção**. ```bash # Start Backend cd stormspotter\backend\ @@ -614,8 +653,12 @@ 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) ``` -## Referências +## References - [Cloud Discovery With AzureHound (Unit 42)](https://unit42.paloaltonetworks.com/threat-actor-misuse-of-azurehound/) +- [Paved With Intent: ROADtools and Nation-State Tactics in the Cloud](https://unit42.paloaltonetworks.com/roadtools-cloud-attacks/) +- [ROADtools repository](https://github.com/dirkjanm/ROADtools) +- [ROADtools msgraph branch](https://github.com/dirkjanm/ROADtools/tree/msgraph) +- [Tom2Byrne/ROADtools](https://github.com/Tom2Byrne/ROADtools) - [AzureHound repository](https://github.com/SpecterOps/AzureHound) - [BloodHound repository](https://github.com/SpecterOps/BloodHound) - [AzureHound Community Edition Flags](https://bloodhound.specterops.io/collect-data/ce-collection/azurehound-flags)