Azure - OSINT
Objectif ?
L’objectif est de collecter des informations sur les utilisateurs du tenant, les ressources exposées et les noms de domaines liées à l’organisation.
Dans cette phase, nous pouvons également faire la découverte deonnées sensible disponible ou non sur internet.
Recon externe passive - Utilisateurs
Hunter.io
Hunter est une plateforme complète qui permet d’identifié les adresses mails et domaines associés à une entreprise.
Ce qui est intéresant avec Hunter.io, c’est qu’il (plus ou moins) trouver le poste de la personne, ce qui va nous permettre de faire du ciblage sur une personne qui à une fonction précise.
Hunter va également également vérifier si l’adresse mail fournit est valide ou non.
Vous pouvez aller tester cet outil à cette URL : https://hunter.io/
ZoomInfo
ZoomInfo est un peu moins recommandé … pas parce qu’il y a moins d’informations ou que la plateforme est moins fiable (niveau données). Mais simplement parce que si nous téléchargeons l’application, et que nous prenons la version gratuite, le binaire va siphonné nos contacts, adresse mail, etc. pour enrichir sa base de données. Il est conseillé de l’utiliser dans un environnement sécurisé et maîtrisé.
Voici le lien de cette plateforme : https://www.zoominfo.com/
Recon externe active - CLI
Pour générer des (potentielle) adresses mail, nous pouvon également utiliser un outil en ligne de commande. Cet outil est username-anarchy disponible sur le repo github suivant :
https://github.com/urbanadventurer/username-anarchy
Pour l’installer il suffit de clonner le repo :
|
|
Une fois dans le dossier username-anarchy nous pouvons installer ruby et lancer notre script :
|
|
Ensuite nous pouvons afficher le contenu de emails.txt :
|
|
Une fois généré nous, pouvons les tester avec l’outil o365enum, disponible sur github au lien suivant :
https://github.com/gremwell/o365enum.git
Pour l’installer, il suffit de suivre les étapes habituelle :
|
|
Une fois installer nous pouvons tester les mail pour savoir le quel est le bon. Ici nous utilsons office.com car c’est le plus fiable il a très peu de faux positif comparé aux autres “module” :
|
|
Dans le résultat de cette commande nous pouvons un résultat avec un 1 c’est la confirmation que c’est cette adresse qui existe et pas une autre.
Contrairement à l’autre méthode (passive), celle-ci génère un peu de bruit dans les logs, rien de bien fou, mais il est important de le savoir. Même si cette méthode laisse passer du bruit dans les logs, elle reste ma préféré, car, plus fiable et nous pouvons avoir un grand nombre d’utilisateur.
Recon externe - Tenant
Pour commencer l’énumération du Tenant nous pouvons voir si l’entreprise possède un Tenant Azure avec le lien suivant : https://login.microsoftonline.com/getuserrealm.srf?login=domain.com&xml=1
|
|
(Ici, j’ai rajouté un pipe pour mettre en forme la sortie de mon curl. Il est possible de ne pas mettre le pipe, voir même de rechercher cette URL sur un navigateur) Voici la sortie de la commande ci-dessus :
|
|
Voilà un petit tableau qui permet de mieux lire cet output :
| Champ | Explication | Valeurs possibles |
|---|---|---|
| Success | La requête a abouti / domaine connu d’Entra ID | true domaine reconnu par Microsoftfalse requête invalide ou domaine non résolu |
| State | État du domaine côté Microsoft | 0-3 états transitoires / non pleinement provisionné4 domaine existant et provisionné (tenant actif)5 domaine non managé / inconnu d’Entra ID |
| UserState | État du compte testé | 1 compte existant / état nominalautres à comparer entre comptes pour inférer la validité |
| NameSpaceType | Mode d’authentification du domaine | Managed auth gérée par Entra ID → spray direct sur login.microsoftonline.comFederated auth déléguée à un IdP (ADFS, Okta…) → champs AuthURL/STSAuthURL, spray sur l’IdPUnknown domaine non géré par Entra ID ou inexistant |
| IsFederatedNS | Le namespace est-il fédéré ? | false cohérent avec Managedtrue cohérent avec Federated (IdP externe) |
| DomainName | Domaine réel résolu côté tenant | domaine.com nom de domaine vérifié dans le tenant |
| FederationBrandName | Nom d’affichage de l’annuaire | Default Directory valeur par défaut<nom org> souvent le nom réel de l’organisation |
| CloudInstanceName | Instance cloud du tenant | microsoftonline.com cloud commercial standard.us / .de / .cn clouds souverains (GCC High, Allemagne, Chine) |
| CloudInstanceIssuerUri | Émetteur de jetons de l’instance | urn:federation:MicrosoftOnline cloud commercial standard |
Ensuite il est également possible d’identifier l’ID du tenant avec l’url suivante :
|
|
(Ici, je vais également faire un curl avec une “formatation” en json afin d’avoir un résultat propre)
|
|
Dans le résultat de la commande ci-dessus, nous pouvons y voir le tenant-id qui représante l’id du tenant. Ce n’est pas une faille en soit mais connaître cet ID peut nous faciliter la tâche lors de l’exploitation de certaines faille.
Recon externe - Tenant W/ Powershell
Pour réaliser sa collecte d’information avec powershell nous pouvons utiliser le module powershell AADInternals avec la commande suivante :
|
|
Une fois ça fait, nous pouvons nous réferer au tableau suivant :
| Commande | Description | Utilité Red Team |
|---|---|---|
Get-AADIntLoginInformation -Domain <domain> |
Informations de connexion du tenant | Identifier le type d’auth (Managed/Federated) |
Get-AADIntTenantID -Domain <domain> |
Récupère l’ID du tenant | Nécessaire pour certaines exploitations |
Get-AADIntTenantDomains -Domain <domain> |
Liste tous les domaines du tenant | Élargir la surface d’attaque |
Invoke-AADIntReconAsOutsider -DomainName <domain> |
Recon complète depuis l’extérieur | SPF, DMARC, DKIM, MTA-STS, DesktopSSO |
Get-AADIntOpenIDConfiguration -Domain <domain> |
Configuration OpenID du tenant | Récupérer les endpoints OAuth2 |
Get-AADIntOAuthInfo -Domain <domain> |
Informations OAuth du tenant | Identifier les méthodes d’auth supportées |
Nous pouvons commencer en récupérant les information de connexion aux tenant :
|
|
Grosso modo c’est les mêmes résultats qu’avec cette commande (vu précédemment) :
|
|
Pour obtenir le tenant-id nous pouvons utiliser la commande :
|
|
Pour avoir des informations sur le SPF, DMARC, DKIM, MTA-STS etc. nous avons la commande :
|
|
(Si vous avez des erreurs sur cette commande c’est “normal”)
Recon externe - Sous-domaine
Pour passer à cette étape, nous avons yuyudhn qui a produit un outil qui automatisait cette recherche (ça facilite vraiment la reconnaissance).
AzSubEnum
On peut trouver cet outil sur le repo github suivant : https://github.com/yuyudhn/AzSubEnum
Pour l’installer il suffit de clonner de repo :
|
|
Et de télécharger les dépendences :
|
|
Une fois téléchargé nous pouvons entrer la commande suivante :
|
|
(/!\ quand nous déclarons le domain, il ne faut pas mettre l’extension .com, .fr etc.)
Il est également de réaliser cette énumération avec le script Powershell MicroBurst : https://github.com/NetSPI/MicroBurst