Kerberos : ASREProasting

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


Jusqu’ici avec Kerberos nous avons pu énuméré les utilisateurs d’un domaine Active Directory et créer un Golden Ticket nous permettant de garder le contrôle sur un domaine en tant qu’administrateur du domaine. Cependant il existe d’autres vecteurs d’attaques liés à Kerberos dont le suivant : L’ASREProasting !


Comme d’habitude si vous ne savez pas comment fonctionne le protocole Kerberos je vous invite à lire cet article qui vous l’expliquera 🙂 !


I/ ASREProasting : kézako ?

Au tout début du processus d’authentification via Kerberos, le client va demander un TGT à l’Authentication Service (AS). La première requête envoyée est la requête AS-REQ. Elle contient ce que l’on appelle un « pré-authentifiant » composé du nom de l’utilisateur ainsi qu’un timestamp le tout chiffré à l’aide du hash NTLM du mot de passe du compte de l’utilisateur :

Capture d’écran du 2019-05-14 11-31-05.png

Si l’authentification réussit (i.e : si le KDC arrive à déchiffrer le nom d’utilisateur et le timestamp chiffré à l’aide du hash NTLM) une second requête est envoyée par le KDC : AS-REP. Cette requête contiendra le fameux TGT (chiffré à l’aide du hash NTLM du compte krbtgt) ainsi qu’une clé de session chiffrée à l’aide du hash du compte de l’utilisateur.

Capture d’écran du 2019-05-14 11-46-19.png

Une fois le TGT et la clé de session reçue le client pourra émettre une demande de TGS auprès du KDC.

Étant donné que la clé de session est chiffrée à l’aide du hash NTLM du mot de passe de l’utilisateur , il est important que cette clé ne soit jamais divulguée de manière publique. C’est pour empêcher cette diffusion que la pré-authentification existe : si le pré-authentifiant n’est pas valide, le TGT et la clé de session ne sont pas émis.

Cependant il existe un attribut fort sympathique présent sur les comptes d’utilisateurs Active Directory : « La pré-authentification Kerberos n’est pas nécessaire » :

Capture d’écran du 2019-05-14 12-21-02.png

Vous la voyez la douille ?

Si cet attribut est activé sur un compte alors, en tant qu’attaquant, on pourra faire une demande de TGT auprès du KDC pour ce compte et ce sans avoir à envoyer de pré-authentifiant. On pourra donc récupérer la fameuse clé de session chiffrée à l’aide du hash NTLM du compte en question.

Puis en offline nous pourrons tenter de cracker le mot de passe.

Pour que cette attaque fonctionne il faut donc :

  1. Qu’il y ait au moins un compte avec l’attribut « La pré-authentification Kerberos n’est pas nécessaire » activé ;
  2. Que le mot de passe associé au compte soit faible (ou fasse parti d’une liste pré-faite) ;

Autrement dit cela risque d’être assez difficile à exploiter en condition réelle mais ça vaut toujours le coup d’essayer 😀 !

II/ Dans la pratique

Tout ce dont nous avons besoin pour tester cette attaque c’est un compte d’utilisateur ayant l’attribut « La pré-authentification Kerberos n’est pas nécessaire » activé. Ce compte sur mon environnement de test ça sera l’utilisateur « Administrateur ».

En condition réelle il faudra d’abord commencer par énumérer les comptes utilisateur ayant l’attribut activé mais ici on va directement se servir de l’outil Rubeus développé par Harmj0y.


EDIT : Après avoir publié cet article je suis tombé sur celui d’Adam Chester qui décrit l’attaque de manière plus détaillé. Dans son article il met à disposition un script powershell permettant de lister les comptes ayant l’attribut « La pré-authentification Kerberos n’est pas nécessaire » :

$strFilter = “(&(objectCategory=User)(userAccountControl:1.2.840.113556.1.4.803:=4194304))”
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.Filter = $strFilter
$objSearcher.SearchScope = “Subtree”
$colProplist = “name”
foreach ($I in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}
$colResults = $objSearcher.FindAll()
$colResults | Format-Table

J’ai passé quelques minutes sur son site et le contenu est vraiment bien du coup je vous invite aussi à vous rendre dessus ! De mon côté je vais continuer à chercher des payloads utilisables lorsque powershell est désactivé !


Cet outil, en plus de la partie asreproast, met en place diverses attaques sur le protocole Kerberos et encore une fois je vous invite à aller lire le README du projet Github.

Attention cependant, l’outil n’existe pas en version pré-compilé. Il faudra donc installer Visual Studio et le compiler soit même.

Pour lancer l’attaque asreproast on utilisera cette commande :

Rubeus.exe asreproast

capture-de28099c3a9cran-du-2019-05-14-16-49-20.png

Comme prévu nous avons récupérer la clé de session chiffrée à l’aide du hash du compte Administrateur que nous allons pouvoir cracker en utilisant JohnTheRipper ou encore hashcat :

Capture d’écran du 2019-05-14 17-07-55.png

GGwp, nous sommes à nouveau domaine admin 😀 !

Pour le moment personne ne sait vraiment à quoi sert cette fonctionnalité de non pré-authentification. Les plus gros chercheurs AD (Harmj0y, Dirkjanm et bien d’autres) ne le savent toujours pas. Quelle que soit son utilité il s’avère que c’est trop dangereux à mettre en place et donc il ne vaut mieux pas l’utiliser.

Pour finir je vous recommande vraiment de lire l’article original, celui d’Harmj0y où il explique plus en détails comment l’attaque fonctionne. Et puis tant qu’à faire je vous invite à vous balader sur son blog qui est vraiment incroyable et riche en contenu !

Un commentaire

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