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
Pasted image 20240522142611.png
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.
Pasted image 20240523171402.png

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 :

Visualiser les données :


En haut à gauche on retrouve tous les objets découverts :
Pasted image 20240523171703.png
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
Pasted image 20240523172007.png
On peut obtenir beaucoup d'informations avec les transitive objects, même sur des comptes dont nous ne possédons pas de login/password :
Pasted image 20240523172712.png
En fouillant dans analysis et dans Pasted image 20240523172732.png on peut rapidement essayer d'obtenir un chemin vers une cible, bref c'est très puissant.