Azure Pentesting

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

AINDA ESTOU CONSTRUINDO A METODOLOGIA DO AZURE

Informações Básicas

pageAz - Basic Information

Metodologia de Teste de Penetração/Red Team do 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 quê e como os serviços internos do Azure e serviços externos estão conectados.

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

  • Vazamentos no github (ou similar) - OSINT

  • Engenharia Social

  • Reutilização de senha (vazamentos de senha)

  • Vulnerabilidades em Aplicações Hospedadas no Azure

  • Falsificação de Solicitação do Lado do Servidor 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 de 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 antigas do Az PowerShell armazenavam tokens de acesso em texto claro em TokenCache.dat. Também armazena ServicePrincipalSecret em texto claro em AzureRmContext.json. O cmdlet Save-AzContext pode ser usado para armazenar tokens. Use Disconnect-AzAccount para removê-los.

  • 3ºs violados

  • Funcionário Interno

  • Phishing Comum (credenciais ou Aplicativo Oauth)

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

pageAz - Unauthenticated Enum & Initial Entry

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

Enumeração Básica

Lembre-se de que a parte mais barulhenta 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, confira esta página para truques:

Bypass de Condições de Login

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

  • Lista branca de IP -- 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 determinado SO (Windows, Linux, Mac, Android, iOS) seja permitido. Descubra qual SO a vítima/empresa usa.

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

Após contornar isso, você pode ser capaz de voltar à sua configuração inicial e ainda ter acesso.

Apropriação de Subdomínio

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

AzureAD

Enumeration

  1. User Enumeration: Use tools like Azure AD Connect to synchronize on-premises directories with Azure AD. This can help in enumerating users in the Azure AD environment.

  2. Group Enumeration: Enumerate groups in Azure AD using tools like Azure AD PowerShell module or Azure Portal.

  3. Service Principal Enumeration: Discover service principals using tools like Azure AD PowerShell module or Azure Portal.

Exploitation

  1. Password Spraying: Perform password spraying attacks against Azure AD accounts to avoid account lockouts and detection.

  2. Brute Force Attacks: Use tools like CrackMapExec or Hydra to perform brute force attacks against Azure AD accounts.

  3. Phishing Attacks: Conduct phishing attacks to steal Azure AD credentials and gain unauthorized access.

  4. Token Impersonation: Exploit token impersonation vulnerabilities to escalate privileges in Azure AD.

Post-Exploitation

  1. Persistence: Establish persistence by creating backdoors or adding rogue service principals in Azure AD.

  2. Data Exfiltration: Extract sensitive data from Azure AD using techniques like Azure AD Graph API or Microsoft Graph API.

  3. Privilege Escalation: Escalate privileges by exploiting misconfigurations or vulnerabilities in Azure AD.

Detection Evasion

  1. Disable Auditing: Disable auditing to avoid detection of malicious activities in Azure AD.

  2. Use of Proxies: Route traffic through proxies to evade detection while interacting with Azure AD.

  3. Obfuscation: Obfuscate malicious scripts or payloads to bypass detection mechanisms in Azure AD.

References

#Get the current session state
Get-AzureADCurrentSessionInfo
#Get details of the current tenant
Get-AzureADTenantDetail

Azure PowerShell

Introduction

Azure PowerShell is a module that provides cmdlets to manage Azure resources directly from the PowerShell command line. It allows for automation and scripting of various tasks within Azure.

Installation

To install Azure PowerShell, you can use the following command:

Install-Module -Name Az -AllowClobber -Scope CurrentUser

Connecting to Azure

To connect to your Azure account using Azure PowerShell, you can use the following command:

Connect-AzAccount

Managing Resources

Azure PowerShell allows you to manage various Azure resources such as virtual machines, storage accounts, and databases. You can use cmdlets like New-AzVM, New-AzStorageAccount, and New-AzSqlDatabase to create new resources.

Scripting and Automation

Azure PowerShell is commonly used for scripting and automation tasks in Azure environments. You can write scripts to automate resource deployment, configuration, and management using Azure PowerShell cmdlets.

Conclusion

Azure PowerShell is a powerful tool for managing Azure resources through the command line interface. It provides a convenient way to automate tasks and perform various operations within Azure.

# Get the information about the current context (Account, Tenant, Subscription etc.)
Get-AzContext
# List all available contexts
Get-AzContext -ListAvailable
# Enumerate subscriptions accessible by the current user
Get-AzSubscription
#Get Resource group
Get-AzResourceGroup
# Enumerate all resources visible to the current user
Get-AzResource
# Enumerate all Azure RBAC role assignments
Get-AzRoleAssignment # For all users
Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user

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

Você pode obter as mesmas informações no console da web acessando https://portal.azure.com/#view/HubsExtension/BrowseAll ou pesquisando por "Todos os recursos".

Enumeração do AzureAD

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

pageAz - AzureAD (AAD)

Agora que você tem algumas informações sobre suas credenciais (e se você é uma equipe vermelha, 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 conferir algumas maneiras de enumerar alguns serviços comuns.

Identidade de Serviço e Política de Acesso

Um serviço Azure pode ter uma Identidade de Sistema (do próprio serviço) ou usar uma Identidade Gerenciada atribuída pelo usuário. Essa 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 Serviço de Aplicativo usaria o KeyVault para recuperar segredos e certificados.

Portanto, é útil explorar essas identidades.

Serviço de Aplicativo SCM

Console Kudu para fazer login no 'container' do Serviço de Aplicativo.

Shell Web

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 conta de armazenamento.

Azure DevOps

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

Ferramentas de Reconhecimento Automatizado

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)

# 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
Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras maneiras de apoiar o HackTricks:

Última actualización