La protection contre le Pass-The-Hash avec Credential Guard

Introduction

Je suis toujours étonné que la technique de « Pass-The-Hash » soit toujours d’actualité sous Windows Server 2016. Cette technique consiste à s’authentifier sur une machine Windows en utilisant le hash du mot de passe d’un utilisateur, plutôt que par le mot de passe lui même. Le hash étant généré par un protocole de type MD5 ou SHA, il est théoriquement non réversible.

Je dis bien théoriquement car il est maintenant possible, avec des tables « rainbow » et des dictionnaires de retrouver un mot de passe (Selon l’algorithme et la force du mot de passe). Par exemple :

  • Mot de passe = password
  • Algorithme = SHA1
  • Hash = 5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8″

Cependant, ce mot de passe est relativement faible, je peux donc facilement retrouver le mot de passe en clair :

9

Vous pouvez retrouver l’outil : ici

Si je mets un mot de passe plus compliqué avec un algorithme plus évolué :

  • Mot de passe = m0td3p@55c0mpl3x3
  • Algorithme = SHA256
  • Hash = a4cf236a543fbdb1c326a311bfe16cf2fe74d90efe6791aee2d7acb20b5b62f5

Si je tente de retrouver le mot de passe en clair, cette fois-ci j’ai un échec :

10

Dans le cadre de Windows, ce hash de mot de passe peut-être accessible :

  • En cache
  • En RAM
  • En transit sur le réseau

Dans les bonnes pratiques, il est conseillé de définir une stratégie de mot de passe fort, de désactiver les algorithmes faibles (LM, NTLM …), de protéger l’accès au réseau.

Mais comment faire pour se protéger si un accès physique à la machine est possible ?

 

Credential Guard

Credential Guard permet d’isoler le processus LSASS, qui gère l’ensemble de l’authentification Windows, dans un environnement de sécurité virtualisé. Credential Guard permet donc de se protéger contre les attaques de vol de hash.

Ci-joint une vue d’ensemble de la façon dont l’autorité de sécurité locale est isolée à l’aide de la sécurité basée sur la virtualisation :

lsass

Cependant, Credential Guard ne fonctionne pas sur les éléments suivants : ici

Il est également nécessaire de répondre à certains des prérequis suivants : ici

Mais en pratique, est-ce que cela fonctionne vraiment ?

 

Machine sans Credential Guard

Pour ce test, j’ai monté deux machines virtuelles avec un domaine Active Directory et j’ai utilisé l’utilitaire « mimikatz » qui permet de récupérer les hash de mot de passe dans la RAM de la machine. Vous pouvez trouver les sources du logiciel : ici

Je suis connecté à ma machine en tant que admin.test@nwtraders.msft et je lance mon logiciel « mimikatz » et j’exécute la commande : privilege::debug

1

Ensuite, je lance la commande : sekurlsa::msv afin de récupérer les hash de mot de passe de l’ensemble des comptes utilisateurs qui se sont connectés au système. Je peux retrouver le hash de mot de passe de mon utilisateur admin.test :

2

Mais également le hash de mot de passe d’autres utilisateurs qui ce sont précédemment connectés. Par exemple, le compte « administrateur » :

3

Sur les versions précédentes de Windows, il était directement possible de récupérer le mot de passe en clair mais maintenant Microsoft chiffre son processus LSASS.

Comme nous avons les hash des mots de passe, il est possible de créer un processus avec une fausse identité avec la commande : sekurlsa::pth /user:administrateur /domaine:nwtraders.msft /ntlm:e19ccf75ee54e06b06a5907af13cef42

4

Comme nous pouvons le voir, il est relativement aisé de récupérer les hash et d’autres informations et de lancer un processus sous le compte d’un autre utilisateur. Voyons maintenant avec Credential Guard.

 

Machine avec Credential Guard

Ma seconde machine dispose du Credential Guard. J’exécute les mêmes commandes qu’auparavant : privilege::debug et sekurlsa::msv

Sauf que cette fois-ci, je ne peux pas récupérer le hash du mot de passe car il est isolé grâce au VBS (Virtualization Based Security) :

5

Mon processus LSASS est donc correctement isolé.

 

Activer et vérifier le Credential Guard

Outre les prérequis techniques, l’activation du Credential Guard est relativement facile. L’activation peut-être effectuée par stratégie locale ou par stratégie de groupe Active Directory dans « Configuration Ordinateur / Modèles d’administration / Système / Device Guard » et « Activer la sécurité basée sur la virtualisation » :

6

Il est possible de vérifier l’activation du Credential Guard grâce au « msinfo32.exe » :

7

Ou grâce à la commande PowerShell suivante :

8

 

Conclusion

Credential Guard nous prouve qu’il est capable de protéger ces fameux hash de mot de passe, la question est pourquoi est-ce que cette fonctionnalité n’est pas active par défaut ?

Je pense que c’est certainement une question de prérequis, qui sont relativement lourds. De plus, l’usurpation de hash nécessite soit un accès physique à une machine ou soit un sniffer sur le réseau.

Je pense cependant que cette technologie a toute sa place sur les serveurs d’entreprise, ou des machines VIP.

2 commentaires Ajoutez le vôtre

  1. harfangus dit :

    Juste si le mot de passe est compliqué il sera difficile avec le hash de le décodé

    J'aime

    1. Exactement, et également de la puissance du protocole de hash utilisé

      J'aime

Votre 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