Utilisation avancée de Mimikatz

Magazine
Marque
MISC
Numéro
66
|
Mois de parution
mars 2013
|
Domaines


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


Sur le même sujet

Toute votre infrastructure Debian en YAML avec DebOps

Magazine
Marque
GNU/Linux Magazine
Numéro
232
|
Mois de parution
décembre 2019
|
Domaines
Résumé

Administrer toutes les briques de son infrastructure Debian à l’aide d’un outil de gestion de configuration est une tâche complexe. Outre la quantité de code nécessaire, il faut représenter les interactions entre les logiciels de l’infrastructure. Projet communautaire basé sur Ansible, DebOps répond à cette problématique avec plus de 160 rôles liés les uns aux autres. De plus, les utilitaires fournis par le projet permettent de simplifier l’utilisation des rôles, ainsi que le respect des bonnes pratiques Ansible. Ceci en fait un outil unique pour automatiser vos infrastructures.

AWX, une WebUI pour vos jobs Ansible

Magazine
Marque
Linux Pratique
Numéro
116
|
Mois de parution
novembre 2019
|
Domaines
Résumé

Ansible c’est cool [1], ça vous apporte rapidité de déploiement, une grande souplesse grâce à ses modèles et bien d’autres avantages. Seulement, vous ne pouvez pas le laisser entre toutes les mains, l'oubli d’une option lors d'un déploiement et c’est tout votre infra qui risque d'être impactée.Le moment tant redouté est-il arrivé ? Êtes-vous devenu le Single Point of Failure de toute l'infrastructure ? Allez-vous devoir vous charger de tous les déploiements, et ce, jusqu’à ce que mort s’ensuive ? Non, non, non et non ! Vous n'allez pas vous laisser faire ! Et quoi de mieux pour mettre le pied à l'étrier de tout le monde qu'une simple WebUI ?

Du Dev au Sysadmin : Apprenez à concevoir et distribuer vos applications sur plusieurs plateformes avec CMake

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
105
|
Mois de parution
novembre 2019
|
Domaines
Résumé

Vous avez souvent réalisé des applications que vous aimeriez tester et partager avec vos collègues, mais vous êtes toujours coincés au niveau de l’organisation des fichiers sources et du déploiement ? Vous tombez pile sur l'article qu’il faut pour résoudre ces problèmes.

Auditer la sécurité d'une application iOS

Magazine
Marque
MISC
Numéro
106
|
Mois de parution
novembre 2019
|
Domaines
Résumé

Auditer la sécurité d'une application iOS n'est toujours pas une tâche aisée. Force est de constater que la plupart des auditeurs, amateurs de bug bounty ou autres curieux préfèrent travailler sur les applications Android malgré les récentes protections ajoutées au système d'exploitation de Google. Nous allons malgré tout essayer de présenter une méthodologie qui rend possible l'analyse orientée sécurité d'une application iOS, même sans jailbreak. Un bref rappel sera effectué pour ensuite introduire quelques outils et documentations apparues ces derniers mois.

Sondes de détection : performances, évaluations et biais

Magazine
Marque
MISC
Numéro
106
|
Mois de parution
novembre 2019
|
Domaines
Résumé

En avril 2019, l’ANSSI a qualifié les premières sondes pour assurer la supervision de sécurité de réseaux. Les opérateurs d’importance vitale (OIV), les opérateurs de services essentiels (OSE) et, d’une manière générale, les organismes opérant des fonctions sensibles disposent ainsi de produits français de confiance : Cybels Sensor de Thales et Trackwatch Full Edition de Gatewatcher.La méthodologie d’évaluation des sondes n’est, hélas, pas publique. Les ingénieurs sécurité et réseau devant intégrer ces sondes ne disposent donc pas de guides pour effectuer la recette de leur efficacité en production. Cet article propose un retour d’expérience sur l’évaluation des sondes, notamment sous l’angle de la performance. Cet aspect est, en effet, particulièrement significatif puisque le taux de détection d’une sonde diminue si elle est submergée, quand bien même elle serait équipée des meilleurs signatures et moteurs d’analyse.

Isolation de conteneurs : You Are NOT Safe

Magazine
Marque
GNU/Linux Magazine
Numéro
231
|
Mois de parution
novembre 2019
|
Domaines
Résumé

« We won’t be able to pretend that we can protect ourselves anymore. It’s a huge danger, a gigantic risk, but it’s worth it, if only we can learn to take care of each other, then this awesome destructive new connection won’t isolate us. It won’t leave us in the end so totally alone. »Cet extrait du manifeste « You are NOT safe » de Ryan Ray dans la série Halt and Catch Fire n'a jamais été autant d'actualité !

Par le même auteur

Contournement de l'API Google Play Billing

Magazine
Marque
MISC
Numéro
106
|
Mois de parution
novembre 2019
|
Domaines
Résumé

D'après le blog [INVESP], le montant global des paiements dits « in-app » représentait environ 37 milliards de dollars (USD) en 2017 pour les applications mobiles (Android et Apple). Ce montant représente quasiment la moitié des revenus générés par les applications mobiles (48,2%), dépassant les revenus générés par les régies publicitaires (14%), ainsi que l'achat d'applications (37,8%). Il est donc important que la sécurité de ces paiements soit correctement implémentée afin d'éviter un manque à gagner pour les développeurs des applications. Dans le cadre de cet article, nous avons passé en revue 50 applications Android afin d'étudier le fonctionnement de l'API Google Play Billing et d'identifier les vulnérabilités liées à une mauvaise implémentation. Nous détaillerons en exemple des applications vulnérables.

Cinq façons de devenir administrateur de domaine avec Metasploit

Magazine
Marque
MISC
HS n°
Numéro
14
|
Mois de parution
octobre 2016
|
Domaines
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.

Mise en place du SIEM Prelude en entreprise – Retour d'expérience

Magazine
Marque
MISC
Numéro
70
|
Mois de parution
novembre 2013
|
Domaines
Résumé
Prelude se présente comme une solution universelle de «  Security Information and Event Management » (SIEM). L'objectif de cet article est de vous présenter la solution Prelude, ainsi que sa mise en place en entreprise. Les avantages et les inconvénients de Prelude seront également discutés.

Utilisation avancée de Mimikatz

Magazine
Marque
MISC
Numéro
66
|
Mois de parution
mars 2013
|
Domaines
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.

Utilisation avancée de sqlmap

Magazine
Marque
MISC
Numéro
62
|
Mois de parution
juillet 2012
|
Domaines
Résumé
Sqlmap est un outil open source permettant d'identifier et d'exploiter une injection SQL sur des applications web. Outre la simple exploitation d'une injection SQL, il fournit également des fonctionnalités permettant la prise de contrôle de l'équipement hébergeant la base de données. Il est devenu aujourd'hui indispensable dans la trousse à outils de tout pentester. Cet article a pour objet de vous présenter les dernières fonctionnalités de l'outil, ainsi que son utilisation dans des cas pratiques.