Kerberos : Kerberoasting

To the non-french speaker, note that you can translate the articles using the Google Trad widget situated at the bottom of all pages.


Dans cet article nous avons parlé de l’ASREProasting. Nous avons vu que l’attaque consistait à profiter du fait qu’un compte utilisateur n’était pas obligé de se pré-authentifier pour requêter un TGT à sa place et cracker son mot de passe.

Cette attaque même si elle est fort sympathique n’a malheureusement que très peu de chance de réussir. En revanche il existe un autre vecteur d’attaque presque identique : Kerberoast ! Et pour le coup celui-ci a beaucoup plus de chance d’être un succès !

I/ Kerberoast la théorie

Une fois que le client a récupéré un TGT auprès de l’Authentication Service, il va contacter le TGS afin d’obtenir un TGS. Étant donné que le TGT est signé avec le hash NTLM du compte krbtgt, le TGS va faire confiance en ce TGT et émettre un TGS.

Or ce TGS est chiffré à partir du hash NTLM du compte de service utilisé par la ressource demandée. Par conséquent si on casse le TGS, on récupère le mot de passe du compte de service. Et heureusement pour nous certains comptes de service tournent avec des privilèges très élevés (CF : l’exploit privexchange).

Du coup tout le principe de l’attaque va être de récupérer un maximum de TGS afin de les craquer offline.

II/ Exploitation

Pour les besoins de cet article j’ai donc ajouté un serveur IIS qui tournera sous le compte de service « webserver » :

Capture d’écran du 2019-05-15 09-28-28.png

Ensuite il va falloir ajouter un SPN à la base de données du domaine. Pour rappel, un SPN est un identifiant qui identifie de manière unique une ressource sur un domaine. Voici la commande que j’ai utilisé :

setspn HTTP/web.whiteflag.local WHITEFLAG\webserver

Ici on spécifie qu’une ressource de type HTTP tourne sur la machine nommée « web » et que le compte de service utilisé pour l’administrer est le compte webserver.

Capture d’écran du 2019-05-15 09-40-17.png

Tout est prêt, on va donc pouvoir lancer l’attaque Kerberoast ! Mais avant tout il va falloir lister les SPN disponibles. Heureusement pour nous l’utilitaire setspn va nous permettre de le faire :

setspn -q */'nom_du_serveur'

Le seul souci ici c’est que nous avons besoin de connaître le nom du serveur à énumérer. Avec powershell on peut faire ça plus rapidement via ce script qui va lister l’ensemble des SPN’s d’un domaine :

cls
$search = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
$search.filter = "(servicePrincipalName=*)"

## You can use this to filter for OU's:
## $results = $search.Findall() | ?{ $_.path -like '*OU=whatever,DC=whatever,DC=whatever*' }
$results = $search.Findall()

foreach( $result in $results ) {
	$userEntry = $result.GetDirectoryEntry()
	Write-host "Object Name = " $userEntry.name -backgroundcolor "yellow" -foregroundcolor "black"
	Write-host "DN      =      "  $userEntry.distinguishedName
	Write-host "Object Cat. = "  $userEntry.objectCategory
	Write-host "servicePrincipalNames"

	$i=1
	foreach( $SPN in $userEntry.servicePrincipalName ) {
		Write-host "SPN(" $i ")   =      " $SPN
		$i+=1
	}
	Write-host ""
}

Merci le MSDN Microsoft ;). De toute façon Rubeus s’occupera de lister tous les SPN’s automatiquement si on l’utilise sans argument :

Rubeus.exe kerberoast

Capture d’écran du 2019-05-15 09-47-42.png

Il ne nous reste plus qu’à tenter de casser le hash via JohnTheRipper par exemple :

Capture d’écran du 2019-05-15 09-53-51.png

Et voilà ! Nous venons de compromettre un compte de service. Bon dans ce cas là ça ne nous servira pas à grand chose puisque ce compte n’est pas privilégié mais vous voyez l’idée 🙂 !


Voilà comment fonctionne cette attaque. Étant donné que l’attaque exploite le fonctionnement natif du protocole Kerberos il n’y a pas grand chose à faire pour s’en protéger. Le seul moyen c’est d’imposer une politique de mot de passe forte pour éviter que les hash soient crackés.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l'aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s