
POC da recente vulnerabilidade de força bruta de senha do Azure Active Directory da SecureWorks
POC da recente vulnerabilidade de força bruta de senha do Azure Active Directory da SecureWorks
Este código é uma prova de conceito da vulnerabilidade de força bruta de senha do Azure Active Directory recentemente revelada, anunciada pela Secureworks (aqui está o artigo da Ars Technica que antecedeu a publicação oficial em cerca de um dia, mas é praticamente idêntico).
Em teoria, essa abordagem permitiria realizar ataques de força bruta ou password spraying contra uma ou mais contas do AAD sem causar bloqueio de conta ou gerar dados de log, tornando o ataque invisível.
O uso básico é simples:
.\aad-sso-enum-brute-spray.ps1 USERNAME PASSWORD
Chamar o código dessa forma permitirá que você obtenha o resultado para o nome de usuário e a senha especificados.
Aproveitando o foreach, você pode facilmente usar isso para password spraying:
foreach($line in Get-Content .\all-m365-users.txt) {.\aad-sso-enum-brute-spray.ps1 $line Passw0rd! |Out-File -FilePath .\spray-results.txt -Append }
Observe que usar esse método exigirá que você converta o arquivo resultante de UTF-16 para UTF-8 se quiser trabalhar com ele no Linux:
iconv -f UTF16 -t UTF-8 spray-results.txt >new-spray-results.txt
Se você estiver interessado apenas em enumeração, basta executar como acima para password spraying. Qualquer valor de retorno "bad password", ou qualquer valor diferente de "no user", significaria que você encontrou um nome de usuário válido.
Um retorno de "True" para um nome de usuário significa que a senha fornecida é válida.
Um retorno de "locked" pode significar que a conta está bloqueada, ou que o Smart Lockout está impedindo temporariamente você de interagir com a conta.
Para usar o código para força bruta, basta iterar sobre o campo de senha em vez do campo de nome de usuário:
foreach($line in Get-Content .\passwords.txt) {.\aad-sso-enum-brute-spray.ps1 [email protected] $line |Out-File -FilePath .\brute-results.txt -Append }
Se você descobrir um ou mais pares de nome de usuário/senha válidos, poderá modificar este código para obter o DesktopSSOToken retornado. O DesktopSSOToken pode então ser trocado por um Access Token OAuth2 usando este método.
O Access Token OAuth2 pode então ser usado com vários endpoints de API do Azure, M365 e O365.
No entanto, você pode ser barrado pelo MFA neste ponto. Sua melhor aposta aqui seria aproveitar o acesso sem MFA, como Outlook Web Access ou ActiveSync. O MFASweep do Dafthack é útil aqui.
O recurso Smart Lockout da Microsoft começará a alegar falsamente que as contas estão bloqueadas se você acessar o endpoint da API rápido demais a partir do mesmo endereço IP. Para contornar isso, recomendo fortemente usar o fireprox do ustayready para evitar esse problema. Basta alterar a variável $url assim:
$url="https://xxxxxxx.execute-api.us-east-1.amazonaws.com/fireprox/"+$requestid
Isso não contornará o Smart Lockout se você estiver tentando fazer força bruta de uma senha para uma conta específica, no entanto.
Quase todo o código para isso foi emprestado do excelente projeto AADInternals do Dr. Nestori Syynimaa.