Azure Hound
Def et utilité :
AzureHound est une implémentation de bloodhound qui sert sur Azure afin de déterminer des chemins d'attaque.
Installation :
https://bloodhound.readthedocs.io/en/latest/installation/linux.html
Sur kali :
On installe d'abord bloodhound :
sudo apt update && sudo apt install -y bloodhound
ensuite on doit build AzureHound :
git clone https://github.com/BloodHoundAD/AzureHound
(Optionnel)
sudo apt install golang-go
puis :
go build .
Utilisation :
Collecter des données :
D'abord il nous faut connecter des données sur la plateforme Azure :
Exemple :
./azurehound -u "MattNelson@contoso.onmicrosoft.com" -p "MyVeryStrongPassword" list groups --tenant "contoso.onmicrosoft.com"
Cette commande va lister tous les groupes.
Pour une connexion en détail voir la section suivante.
Aussi pour utiliser ces données avec Bloodhound on ajoute :
-o output.json
Une fois l'output obtenu on utilise désormais bloodhound :
sudo neo4j console
ensuite on peut y accéder sur localhost:7474
pour la plateforme de gestion de la base de donnée
login : neo4j
passwd : neo4j
ce sont les passwd initiaux, les nouveaux sont neo4j/admin
une fois neo4j lancé on va démarrer bloodhound :
bloodhound
une fois fait il suffit d'uploader la donnée sur AzureHound.
Authentification et scope :
MFA :
ATTENTION IL FAUT BIEN ÊTRE CONNECTÉ SUR LE TENANT AVANT DE FAIRE LA MANIP
Pour se connecter avec un MFA, il faut un powershell sous kali :
pwsh
dans le powershell on colle :
$body = @{
"client_id" = "1950a258-227b-4e31-a9cf-717495945fc2"
"resource" = "https://graph.microsoft.com"
}
$UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
$Headers=@{}
$Headers["User-Agent"] = $UserAgent
$authResponse = Invoke-RestMethod `
-UseBasicParsing `
-Method Post `
-Uri "https://login.microsoftonline.com/common/oauth2/devicecode?api-version=1.0" `
-Headers $Headers `
-Body $body
$authResponse
Avec cette commande on obtient un user_code et device_code, dans un navigateur il faut ensuite se logger sur le compte utilisateur. On va ensuite sur : https://microsoft.com/devicelogin
et on colle le user_code et on approuve la requête.
Dans le powershell on doit ensuite coller ce code :
$body=@{
"client_id" = "1950a258-227b-4e31-a9cf-717495945fc2"
"grant_type" = "urn:ietf:params:oauth:grant-type:device_code"
"code" = $authResponse.device_code
}
$Tokens = Invoke-RestMethod `
-UseBasicParsing `
-Method Post `
-Uri "https://login.microsoftonline.com/Common/oauth2/token?api-version=1.0" `
-Headers $Headers `
-Body $body
$Tokens
On reçoit ensuite plusieurs tokens, notament un refresh token qui doit commencer par quelque chose qui ressemble à : 0.ARwA6Wg…
Ensuite on utilise la commande suivante avec le switch -r
./azurehound -r "0.ARwA6Wg..." list --tenant "contoso.onmicrosoft.com" -o output.json
Moyens d'authentifications et scopes :
https://bloodhound.readthedocs.io/en/latest/data-collection/azurehound-all-flags.html
Flags :
- apps Collects AzureAD application registration objects.
- devices Collects AzureAD devices regardless of join type.
- groups Collects AzureAD security-enabled groups, both role eligible and non role eligible.
- key-vaults Collects AzureRM key vaults.
- management-groups Collets AzureRM management group objects
- resource-groups Collects AzureRM resource group objects
- roles Collects AzureAD admin role objects
- service-principals Collects AzureAD service principals
- subscriptions Collets AzureRM subscriptions
- tenants Collets AzureAD tenant objects
- users Collects AzureAD users, including any guest users in the target tenant.
- virtual-machines Collects AzureRM virtual machines
Visualiser les données :
En haut à gauche on retrouve tous les objets découverts :
On peut ensuite chercher des nodes dans cet onglet et chercher la node de départ et la node d'arrivée. Aussi on peut descendre sur cette page pour avoir plus d'explications sur les moyens de parvenir à notre cible
On peut obtenir beaucoup d'informations avec les transitive objects, même sur des comptes dont nous ne possédons pas de login/password :
En fouillant dans analysis et dans