Utilisation avancée de Mimikatz

Magazine
Marque
MISC
Numéro
66
Mois de parution
mars 2013
Spécialité(s)


Résumé

Mimikatz est un outil permettant d’effectuer diverses actions sur un système Windows : injection de bibliothèques, manipulation de processus, extraction de hashes et de mots de passe notamment. Il devient indispensable aujourd’hui dans la boîte à outils de tout pentester. Cet article a pour objectif de vous présenter l'utilisation de l'outil lors d'un test d'intrusion, ainsi que l'extraction de mots de passe et de certificats.


Body

1. Présentation

L’outil Mimikatz a été développé par Benjamin Delpy (aka GentilKiwi [BLOG]). Rendu public en 2007. Mimikatz fonctionne sur les versions supérieures à Windows 2000 (les versions 32 et 64 bits sont supportées) : XP, 2003, Vista, Seven, 2008, 2008R2, 8, 2012.

Le code source de l’outil est disponible sur Google Code [CODE].

1.1 Modules

Mimikatz est organisé autour de différents modules (liste non exhaustive) :

- standard : intègre les commandes de base de l'outil.

- crypto : interagit avec les modules cryptographiques de Windows CryptoAPI [CAPI]et CNG [CNG], ainsi que l’extraction de certificats et de clés.

- sekurlsa : extrait les hashes et mots de passe des sessions Windows en cours.

- system : intègre des commandes système de base telles que l’obtention de l’utilisateur et de l’ordinateur courant.

- winmine et minesweeper : module de démonstration permettant de manipuler le démineur de Windows XP et 7.

- nogpo : permet de contourner certaines GPO Windows triviales.

- samdump : permet d’extraire les hashes de la base SAM de l’équipement Windows, via la base de registre ou des fichiers plats.

- inject : injection de bibliothèques dans des processus Windows.

- ts : manipulation des sessions Terminal Server (autorise le dépassement du nombre maximal de connexions simultanées notamment).

- divers : contient diverses fonctions majoritairement expérimentales.

1.2 Bibliothèques

Il est à noter que l’outil fournit également trois bibliothèques :

- sekurlsa : fournit les mêmes fonctionnalités que le module éponyme. Il est préconisé de privilégier l’utilisation du module.Elle ne contient maintenant que les fonctionnalités devant s'exécuter dans le processus LSASS (processus gérant l'authentification des utilisateurs de l'équipement).

- klock : permet la manipulation de bureaux.

- kelloworld : est une bibliothèque servant d’exemple pour l’injection.

1.3 Pilote

Enfin, un pilote mimikatz.sys est également fourni et permet ainsi d’avoir un point d’entrée en mode utilisateur dans le noyau. Pour plus d’informations sur ce pilote, nous vous recommandons la lecture du blog de l’auteur de l’outil [PILOTE].

Dans le cadre de cet article, nous vous présenterons uniquement les modules sekurlsa et crypto. Il s'agit des modules les plus utiles lors d'un test d'intrusion.

2. Fonctionnement

2.1 Attaque « pass-the-pass »

L'attaque « pass-the-pass » consiste à récupérer les mots de passe en clair contenus dans la mémoire des utilisateurs s'étant logués sur le système. Elle est implémentée dans le module sekurlsa de Mimikatz, exploitant le processus LSASS afin d'extraire les mots de passe contenus dans les services suivants :

- tspkg ;

- wdigest ;

- livessp ;

- kerberos ;

- msv1_0.

Ces services stockent en mémoire les identifiants utilisateur (y compris son mot de passe) lors de la phase d'ouverture de session afin d'assurer un mécanisme de Single-Sign-On (SSO) de Windows. Il s'agit de « Security Service Providers » (SSP) chargés dans le processus LSASS.

Le mot de passe n'est pas directement stocké en clair, c'est pourquoi il n'est pas possible de les trouver via une simple recherche de caractères dans la mémoire.

LSASS utilise l'API LsaProtectMemory(), qui permet de chiffrer des données avec une clé de session aléatoire.

Il est alors possible de faire appel à la fonction LsaUnprotectMemory() afin de forcer les services concernés à dévoiler les mots de passe en clair .

Il existe deux méthodes pour parvenir à cette fin :

- Injecter du code dans le processus LSASS pour appeler l'API en question. Cette technique déclenche quasiment tous les antivirus du marché, et ne doit pas être utilisée « en production ». Elle peut causer un arrêt du processus.

- Modifier le processus LSASS directement en mémoire pour récupérer la clé de session et les mots de passe chiffrés. Connaissant l'algorithme de chiffrement (RC4, DESx, 3DES ou AES selon la longueur du mot de passe et les versions de Windows), on en déduit les mots de passe. Cette technique échappe à presque tous les produits de sécurité, y compris les plus sérieux.

La modification de la mémoire à la volée permet de ne pas injecter de code dans LSASS et ainsi éviter tout dysfonctionnement du processus. De plus, une tentative d'injection de code dans le processus semblera beaucoup plus suspecte pour un antivirus.

Il va sans dire que Mimikatz implémente la deuxième méthode.

2.2 Attaque « pass-the-hash »

L'attaque « pass-the-hash » permet de se connecter à distance sur un équipement Windows sans connaître les mots de passe en clair associés aux comptes ciblés.

En effet, l'étude des mécanismes d'authentification LM et NTLM (en… 1997 !) a permis de démontrer que seul le login et le(s) hash(s) du mot de passe étaient nécessaires afin de valider une authentification LM ou NTLM(v2).

Ainsi, si nous sommes en possession d'un login utilisateur et du hash de son mot de passe, nous sommes en mesure d'envoyer ces informations directement au système distant qui validera l'authentification.

2.3 Module Crypto

Le module crypto de Mimikatz permet de lister/exporter les certificats ainsi que de modifier les mécanismes de chiffrement CryptoAPI [CAPI]et CNG [CNG]afin de contourner les vérifications d'export (certaines clés privées pouvant être déclarées comme « non exportables »).

Dans le cadre de l'utilisation de la CryptoAPI, Mimikatz va remplacer4 octets dans l’espace mémoire utilisateur afin de remplacer deux sauts conditionnels en sauts inconditionnels (« jnz» -> « jmp »).

Une fois cette manipulation effectuée, le mécanisme de sécurité du processus rsaenh!CPExportKey ne sera pas en mesure de vérifier les paramètres d'export et continuera l'extraction du certificat et de sa clé privée associée.

Le mécanisme CNG, fourni par Microsoft en réponse aux Critères Communs, ne stocke plus les clés privées au sein du processus utilisateur, mais dans le processus système LSASS [TECHNET].

La fonction lsass(keyiso):ncrypt!SPCryptExportKey permet d'effectuer toutes les vérifications lors d'une demande d'exportation d'un certificat.

Cependant, en forçant un saut conditionnel « jnz », il est possible de contourner le mécanisme de sécurité du processus.

Une fois ces actions effectuées, Mimikatz est en mesure d'exporter une grande partie des certificats et des clés privées présents dans le système.

3. Cas d'utilisation

Afin de vous présenter de manière concrète les possibilités d'utilisation de Mimikatz, nous nous plaçons dans le contexte d'un test d'intrusion simulant le vol d'un ordinateur portable appartenant à un collaborateur de l'entreprise.

L'analyse du portable nous permet de constater qu'une connexion VPN au réseau interne de l'entreprise est disponible sur l'équipement.

3.1 Extraction de certificats et des clés privées associées

Comme indiqué dans le descriptif de la mission, l'ordinateur portable possède un certificat privé, protégé par un mot de passe, permettant la connexion au réseau interne de l'entreprise via un VPN PEAP-TLS.

Il est à noter que la configuration actuelle de l'ordinateur portable ne permet pas d'exporter la clé privée du certificat.

Suite à l'obtention des droits SYSTEM sur l'équipement (via un redémarrage du poste sur un système tiers type live CD afin de récupérer ou créer un compte administrateur local, cette étape est laissée en exercice au lecteur !), nous utilisons le module crypto de Mimikatz afin de récupérer le certificat utilisé lors de la connexion VPN, ainsi que la clé privée associée.

La première étape consiste à rechercher, dans les magasins de la machine, l’endroit où est stocké le certificat. Dans notre cas, le certificat étant associé à un utilisateur, nous listons les magasins de l'utilisateur courant (CERT_SYSTEM_STORE_CURRENT_USER) via la commande suivante :

mimikatz # crypto::listStores <MagasinSystème>

 

listStores

 

N.B. : Les certificats d’authentification sont très souvent dans :

- CERT_SYSTEM_STORE_LOCAL_MACHINEMy ;

- CERT_SYSTEM_STORE_CURRENT_USERMy.

Sans argument, c’est ce dernier emplacement qui est utilisé par les fonctions crypto::listCertificates et crypto::exportCertificates.

Pour chaque magasin identifié, nous sommes en mesure de lister les certificats disponibles :

mimikatz # crypto::listCertificates <MagasinSystème> <Magasin>

 

listCertificate

 

Dans notre exemple, nous constatons dans le magasin CERT_SYSTEM_STORE_CURRENT_USER\My la présence d'un certificat nommé mathieu.mauger(identique au compte de domaine Windows) utilisé pour l'authentification VPN.

Afin d'exporter la clé privée du certificat mathieu.mauger, nous patchons le mécanisme de sécurité CryptoAPI à l'aide de la fonction patchapi :

mimikatz # crypto::patchcapi

 

patchCertificate

 

N.B. : Si la clé avait été protégée par la CNG, nous aurions dû patcher LSASS avant d’exporter via :

mimikatz # crypto::patchcng

 

patchcng

 

Enfin, il nous suffit d'exécuter la commande suivante pour récupérer le certificat et la clé privée associée :

mimikatz # crypto::exportCertificates < MagasinSystème> <Magasin>

 

exportCertificate

 

Le certificat ainsi exporté est stocké dans le répertoire courant sous le format DER. Tandis que la partie privée est sauvegardée sous le format PFX et est protégée par le mot de passe : « mimikatz ».

Nous pouvons à présent installer le certificat et la clé privée sur l'une de nos machines afin d'obtenir un accès au réseau interne par le tunnel VPN et ainsi continuer le test d'intrusion.

3.2 Extraction des mots de passe Windows

Une fois connectés au réseau interne, nous avons été à même d'obtenir un shell meterpreter sur un serveur Windows 2003 avec les droits SYSTEM à l'aide d'une vulnérabilité sur le compte de domaine SA.

À l’aide de Mimikatz, et plus particulièrement du module sekurlsa, nous pouvons extraire les mots de passe en clair de tous les utilisateurs (et services) ayant une session ouverte. Dans certains cas, il peut subsister des « restes » de sessions en mémoire, ceci rend bien entendu la collecte encore plus intéressante !

Nous allons donc utiliser l'exécution en mémoire de Mimikatz afin d'éviter le dépôt de fichier sur le serveur.

L'intérêt est de ne pas déposer l'outil sur le système de fichiers de la machine et ainsi le rendre indétectable par des produits de sécurité.

Nous sommes donc en possession d’une console meterpreteret allons maintenant lancer l'exécution de Mimikatz à distance à l’aide de la commande execute et des options spécifiques suivantes :

- H : crée un processus caché.

- i : interagit avec le processus une fois ce dernier créé.

- c : déporte la sortie standard de l’exécutable sur le shell meterpreter.

- d : indique le nom du processus à utiliser et qui apparaîtra ainsi dans le gestionnaire des tâches.

- m : exécute le programme depuis la mémoire.

- f : signale l’exécutable.

- a : signale les arguments. Il est à noter l'utilisation de guillemets pour les arguments de Mimikatz.

Voici l'exécution complète de la commande :

 

meterpreter

 

Pour information, les paramètres donnés au module sekurlsa diffèrent en fonction des versions Windows.

Pour les versions supérieures de Windows, il est nécessaire de nous attribuer le privilège Debug si nous ne sommes pas déjà SYSTEM. Pour cela, nous allons utiliser la commande :

mimikatz # privilege::debug

 

debug

 

Si la commande s’est bien exécutée, nous recevons un message confirmant la bonne obtention des droits. Il suffit ensuite d’utiliser la même commande que dans l'exemple de meterpreter :

mimikatz # sekurlsa::logonPasswords full

 

logonPasswords2

 

Nous sommes à présent en possession des mots de passe en clair stockés dans le service LSASS.

N.B. : Il est intéressant de noter que même si le stockage des hashes LM a été désactivé via la directive NoLMHash, cela n’empêche pas Windows de conserver une version en mémoire de celui-ci.

3.3 Récupération des mots de passe en base de registre

Dans le contexte de la mission, nous constatons la présence du logiciel de prise de main à distance RealVNC. Ce logiciel stocke les mots de passe dans la base de registre sous le format DES.

Il serait donc intéressant d'explorer la base de registre afin d'obtenir le mot de passe en question.

Cependant, il se peut qu’une stratégie de groupes, appelée GPO (Group Policy Object), soit mise en place afin d’interdire aux utilisateurs l’ouverture de l’éditeur de registre.

Mimikatz possède un module baptisé noGPO qui est en mesure de contourner les protections imposées par les stratégies.

Par exemple, pour ouvrir la base, nous pouvons utiliser la commande suivante :

mimikatz # Nogpo::regedit

Il est possible de faire de même pour l’invite de commande, le gestionnaire des tâches et l’utilisation des PST dans Outlook via les commandes respectives suivantes :

mimikatz # Nogpo::cmd

mimikatz # Nogpo::taskmgr

mimikatz # Nogpo::olpst

4. Protections

La mise en place d’une configuration afin de se prémunir de Mimikatz n’est pas chose aisée.

La solution idéale serait que le mot de passe en clair ne soit pas conservé dans la mémoire du processus LSASS, mais dans l’état actuel des choses, cela casserait le SSO (Single-Sign-On) mis en place par Microsoft.

Au niveau de la configuration de Windows, il est possible de désactiver les Security Service Providers (SSP) stockant les mots de passe en clair tels que :

- LiveSSP ;

- TsPkg ;

- Wdigest.

Néanmoins, il apparaît difficile (voire impossible) de désactiver les services Kerberos et MSV1_0.

En effet, les services MSV1_0 et Kerberos gèrent, respectivement, l'authentification en local et sur le domaine Windows des utilisateurs.

Enfin, il faut proscrire la connexion via le Terminal Server ou l'ouverture d'une session en local sur l'équipement. Le fait d'utiliser uniquement l'authentification par le réseau (par exemple via l'utilitaire psexec) permet d'éviter que le mot de passe ne soit conservé dans la mémoire de l'équipement étant donné qu’il n’est jamais envoyé à l'équipement.

Conclusion

Comme nous venons de le voir, Mimikatz est une véritable boîte à outils, indispensable à tout pentester, désireux de récupérer les mots de passe stockés en clair dans les Security Service Providers (SSP) ou d'extraire les clés privées associées aux certificats d'un équipement Windows lors d'un test d'intrusion interne.

Néanmoins, Mimikatz possède quelques points faibles. Par exemple, le fait de nécessiter les droits administrateur pour extraire les mots de passe. De plus, Mimikatz est à présent détecté par certaines solutions antivirales comme un « hacktool ».

Mimikatz recèle encore de nombreux secrets et est en constante évolution. Mangez-en, c'est bon !

Remerciements

Nous tenons à remercier Benjamin Delpy (@GentilKiwi) pour sa relecture attentive.

Références

[BLOG] http://blog.gentilkiwi.com

[CODE] https://code.google.com/p/mimikatz/

[PILOTE] http://blog.gentilkiwi.com/mimikatz/pilote

[CAPI] http://technet.microsoft.com/library/cc962093.aspx

[CNG] http://msdn.microsoft.com/library/windows/desktop/aa376210.aspx

[TECHNET] http://technet.microsoft.com/fr-fr/library/cc730763%28v=ws.10%29.aspx

 



Article rédigé par

Par le(s) même(s) auteur(s)

Présentation de l'OWASP Mobile Security Testing Guide

Magazine
Marque
MISC
Numéro
106
Mois de parution
novembre 2019
Spécialité(s)
Résumé

Paru en juin 2018, l'OWASP Mobile Security Testing Guide (MSTG) est devenu une référence pour appréhender et auditer la sécurité des applications mobiles (Android et iOS). Dans cet article, nous allons passer en revue le guide et présenter quelques exemples d'utilisation.

Quels outils pour l'audit d'intrusions d'applications web ?

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
97
Mois de parution
juillet 2018
Spécialité(s)
Résumé

L'évaluation de la sécurité d'une application web n'est pas chose aisée. Les technologies et frameworks se multiplient et la pression sur la mise en production des applications augmente. Dans cet environnement actuel, il devient de plus en plus difficile de s'assurer qu'aucun défaut de sécurité ne sera présent lors de la mise en production. Cet article a pour but de présenter les différents outils (libres et gratuits), ainsi que les techniques pouvant être utilisées pour identifier les faiblesses de sécurité que l'on rencontre fréquemment en audit.

Cinq façons de devenir administrateur de domaine avec Metasploit

Magazine
Marque
MISC
HS n°
Numéro
14
Mois de parution
octobre 2016
Spécialité(s)
Résumé

En test d'intrusion interne, la compromission d'un domaine Windows est quasi-systématique. Les différentes protections mises en place ne font que ralentir la progression de l'attaquant ou l'auditeur. Dans cet article, nous n'allons pas vous apprendre à effectuer un test d'intrusion, mais vous présenter 5 scénarios d'attaques qui vous permettront de compromettre un domaine Windows rapidement et quasiment à coup sûr à l'aide de Metasploit.

Les derniers articles Premiums

Les derniers articles Premium

Quarkus : applications Java pour conteneurs

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Initié par Red Hat, il y a quelques années le projet Quarkus a pris son envol et en est désormais à sa troisième version majeure. Il propose un cadre d’exécution pour une application de Java radicalement différente, où son exécution ultra optimisée en fait un parfait candidat pour le déploiement sur des conteneurs tels que ceux de Docker ou Podman. Quarkus va même encore plus loin, en permettant de transformer l’application Java en un exécutable natif ! Voici une rapide introduction, par la pratique, à cet incroyable framework, qui nous offrira l’opportunité d’illustrer également sa facilité de prise en main.

De la scytale au bit quantique : l’avenir de la cryptographie

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Imaginez un monde où nos données seraient aussi insaisissables que le célèbre chat de Schrödinger : à la fois sécurisées et non sécurisées jusqu'à ce qu'un cryptographe quantique décide d’y jeter un œil. Cet article nous emmène dans les méandres de la cryptographie quantique, où la physique quantique n'est pas seulement une affaire de laboratoires, mais la clé d'un futur numérique très sécurisé. Entre principes quantiques mystérieux, défis techniques, et applications pratiques, nous allons découvrir comment cette technologie s'apprête à encoder nos données dans une dimension où même les meilleurs cryptographes n’y pourraient rien faire.

Les nouvelles menaces liées à l’intelligence artificielle

Magazine
Marque
Contenu Premium
Spécialité(s)
Résumé

Sommes-nous proches de la singularité technologique ? Peu probable. Même si l’intelligence artificielle a fait un bond ces dernières années (elle est étudiée depuis des dizaines d’années), nous sommes loin d’en perdre le contrôle. Et pourtant, une partie de l’utilisation de l’intelligence artificielle échappe aux analystes. Eh oui ! Comme tout système, elle est utilisée par des acteurs malveillants essayant d’en tirer profit pécuniairement. Cet article met en exergue quelques-unes des applications de l’intelligence artificielle par des acteurs malveillants et décrit succinctement comment parer à leurs attaques.

Les listes de lecture

11 article(s) - ajoutée le 01/07/2020
Clé de voûte d'une infrastructure Windows, Active Directory est l'une des cibles les plus appréciées des attaquants. Les articles regroupés dans cette liste vous permettront de découvrir l'état de la menace, les attaques et, bien sûr, les contre-mesures.
8 article(s) - ajoutée le 13/10/2020
Découvrez les méthodologies d'analyse de la sécurité des terminaux mobiles au travers d'exemples concrets sur Android et iOS.
10 article(s) - ajoutée le 13/10/2020
Vous retrouverez ici un ensemble d'articles sur les usages contemporains de la cryptographie (whitebox, courbes elliptiques, embarqué, post-quantique), qu'il s'agisse de rechercher des vulnérabilités ou simplement comprendre les fondamentaux du domaine.
Voir les 66 listes de lecture

Abonnez-vous maintenant

et profitez de tous les contenus en illimité

Je découvre les offres

Déjà abonné ? Connectez-vous