Accès Initial

Pour rapidement savoir si une entreprise utilise Azure AD, une simple requête HTTP suffit :

https://login.microsoftonline.com/getuserrealm.srf?login=username@test.onmicrosoft.com&xml=1

<RealmInfo Success="true">
  <State>4</State>
  <UserState>1</UserState>
  <Login>username@test.onmicrosoft.com</Login>
  <NameSpaceType>Managed</NameSpaceType>
  <DomainName>test.onmicrosoft.com</DomainName>
  <IsFederatedNS>false</IsFederatedNS>
  <FederationBrandName>ABC</FederationBrandName>
  <CloudInstanceName>microsoftonline.com</CloudInstanceName>
  <CloudInstanceIssuerUri>urn:federation:MicrosoftOnline</CloudInstanceIssuerUri>
</RealmInfo>

Dans le cas ci-dessus, on remarque la valeur de NameSpaceType à Managed, signifiant que le tenant test.onmicrosoft.com existe.

Identifier les utilisateurs

La première étape d’une opération Red Team / Pentest Azure AD est d’obtenir des identifiants pour mettre le pied sur le tenant Azure.

Si on connait le format d’email utilisé par l’entreprise en question, il est possible d’utiliser CrossLinked [GitHub] pour scrapper les réseaux sociaux et construire une liste de potentiels utilisateurs :

crosslinked $COMPANY -f $EMAIL_FORMAT

# Exemples de formats
{first}.{last}@$COMPANY
{f}.{last}@$COMPANY
{f}{last}@$COMPANY

Pour chaque utilisateur découvert et chaque email généré dans le fichier names.txt, il est possible de vérifier si l’utilisateur existe avec AADInternals :

# Nom par nom
Invoke-AADIntUserEnumerationAsOutsider -UserName $USER@$COMPANY
# A partir d'une liste d'utilisateurs
Get-Content ./names.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal

Il est alors possible en sources ouvertes de construire une liste d’utilisateurs valides pour un tenant Azure AD.

Password Spray

Par défaut, la politique de mot de passe bloque les comptes pendant 60 secondes à partir de 10 tentatives de connexion erronées.