Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
meltdown — Demos de prueba de concepto y la librería libkdump que demuestran el ataque de microarquitectura Meltdown, filtrando memoria del kernel y memoria física en CPUs Intel vulnerables. | Kitploit
Herramientas/GitHubGitHub/isec-tugraz/meltdown
Forensia de MemoriaAnálisis de VulnerabilidadesExplotaciónExfiltración de DatosCriptografíaSeguridad de HardwarePapers e InvestigaciónExplotación de BinariosArchived
GitHubisec-tugraz/meltdown

meltdown

Demos de prueba de concepto y la librería libkdump que demuestran el ataque de microarquitectura Meltdown, filtrando memoria del kernel y memoria física en CPUs Intel vulnerables.

4.2k521hace 4 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver RepositorioSitio web

Prueba de concepto de Meltdown

Este repositorio contiene varias aplicaciones que demuestran el error de Meltdown. Para obtener información técnica sobre el error, consulte el artículo:

  • Meltdown de Lipp, Schwarz, Gruss, Prescher, Haas, Mangard, Kocher, Genkin, Yarom y Hamburg

Las aplicaciones de este repositorio están construidas con libkdump, una biblioteca que desarrollamos para el artículo. Esta biblioteca simplifica la explotación del error al adaptarse automáticamente a ciertas propiedades del entorno.

Vídeos

Este repositorio contiene varios vídeos que demuestran Meltdown

  • Vídeo n.º 1 muestra cómo se puede usar Meltdown para espiar en tiempo real una entrada de contraseña.
  • Vídeo n.º 2 muestra cómo Meltdown filtra el contenido de la memoria física.
  • Vídeo n.º 3 muestra cómo Meltdown reconstruye una foto desde la memoria.
  • Vídeo n.º 4 muestra cómo Meltdown reconstruye una foto desde la memoria que está codificada con el formato de archivo FLIF.
  • Vídeo n.º 5 muestra cómo Meltdown filtra memoria no cacheada.

Demos

Este repositorio contiene cinco demos para demostrar diferentes casos de uso. Todas las demos están probadas en Ubuntu 16.04 con un Intel Core i7-6700K, pero deberían funcionar en cualquier sistema Linux con cualquier CPU Intel moderna desde 2010.

Para obtener los mejores resultados, recomendamos una CPU rápida que admita Intel TSX (por ejemplo, cualquier Intel Core i7-5xxx, i7-6xxx o i7-7xxx). Además, cada demo debería fijarse a un núcleo de CPU, por ejemplo con taskset.

Dependencia de compilación para las demos

Como requisito previo, necesita instalar glibc-static en su máquina.

Para sistemas basados en RPM:

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

Demo n.º 1: Una primera prueba (test)

Esta es la demo más básica. Usa Meltdown para leer direcciones accesibles desde su propio espacio de direcciones, sin romper ningún mecanismo de aislamiento.

Si esta demo no funciona en su caso, lo más probable es que las demos restantes tampoco funcionen. Las razones son múltiples, por ejemplo, la CPU podría ser demasiado lenta, no admitir ejecución fuera de orden, el temporizador de alta resolución no ser lo suficientemente preciso (especialmente en máquinas virtuales), el sistema operativo no admitir manejadores de señales personalizados, etc.

Compilar y ejecutar

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

Si ve una salida similar a esta

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

entonces la demo básica funciona.

Demo n.º 2: Romper KASLR (kaslr)

A partir del kernel de Linux 4.12, KASLR (Kernel Address Space Layout Randomizaton) está activo por defecto. Esto significa que la ubicación del kernel (y también el mapa físico directo que asigna toda la memoria física) cambia con cada reinicio.

Esta demo usa Meltdown para filtrar la aleatorización (secreta) del mapa físico directo. Esta demo requiere privilegios de root para acelerar el proceso. El artículo describe una variante que no requiere privilegios de root.

Compilar y ejecutar

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

Después de unos segundos, debería ver algo similar a esto

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

Demo n.º 3: Prueba de fiabilidad (reliability)

Esta demo prueba cuán fiablemente se puede leer la memoria física. Para esta demo, o bien necesita el desplazamiento del mapa físico directo (por ejemplo, de la demo n.º 2) o tiene que deshabilitar KASLR especificando nokaslr en la línea de comandos del kernel.

Compilar y ejecutar

Compile e inicie reliability. Si tiene KASLR habilitado, el primer parámetro es el desplazamiento del mapa físico directo. De lo contrario, el programa no requiere ningún parámetro.

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

Después de unos segundos, debería obtener una salida similar a esta:

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

Demo n.º 4: Leer memoria física (physical_reader)

Esta demo lee memoria de un proceso diferente leyendo directamente la memoria física. Para esta demo, o bien necesita el desplazamiento del mapa físico directo (por ejemplo, de la demo n.º 2) o tiene que deshabilitar KASLR especificando nokaslr en la línea de comandos del kernel.

En principio, este programa puede leer direcciones físicas arbitrarias. Sin embargo, como la memoria física contiene muchos datos no legibles por humanos, proporcionamos una herramienta de prueba (secret), que coloca una cadena legible por humanos en la memoria y proporciona directamente la dirección física de esta cadena.

Compilar y ejecutar

Para la demo, primero ejecute secret (como root) para obtener la dirección física de una cadena legible por humanos:

root@kitploit:~
make
sudo ./secret

Debería mostrar algo como esto:

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

Mientras el programa secret se está ejecutando, inicie physical_reader. El primer parámetro es la dirección física impresa por secret. Si no tiene KASLR deshabilitado, el segundo parámetro es el desplazamiento del mapa físico directo.

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

Después de unos segundos, debería obtener una salida similar a esta:

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

If you can read this, this is really bad

Demo n.º 5: Volcar la memoria (memdump)

Esta demo vuelca el contenido de la memoria. Al igual que las demos n.º 3 y n.º 4, usa el mapa físico directo para volcar el contenido de la memoria física en un formato similar a un hexdump.

De nuevo, como la memoria física contiene mucho contenido no legible por humanos, proporcionamos una herramienta de prueba para llenar grandes cantidades de la memoria física con cadenas legibles por humanos.

Compilar y ejecutar

Para la demo, primero ejecute memory_filler para llenar la memoria con cadenas legibles por humanos. El primer argumento es la cantidad de memoria (en gigabytes) que se va a llenar.

root@kitploit:~
make
./memory_filler 9

Luego, ejecute la herramienta memdump para volcar el contenido de la memoria. Si ejecutó memory_filler antes, debería ver algunos fragmentos de cadenas. Si tiene Firefox o Chrome con varias pestañas abiertas, también podría ver partes de los sitios web que están abiertos o que se cerraron recientemente.

El primer parámetro es la dirección física en la que debe comenzar el volcado (déjelo vacío para comenzar en el primer gigabyte). El segundo parámetro es la cantidad de bytes que desea leer; para leerlo todo, indique -1. Si no tiene KASLR deshabilitado, el tercer parámetro es el desplazamiento del mapa físico directo.

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

Debería obtener un hexdump de partes de la memoria (que potencialmente incluso contenga secretos como contraseñas, consulte el ejemplo en el artículo), por ejemplo:

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 |

Preguntas frecuentes

  • ¿Funciona en Windows / Ubuntu on Windows (WSL) / Mac OS?

    No. Esta PoC solo funciona en Linux, ya que usa propiedades específicas del kernel de Linux, como el mapa físico directo.

  • ¿Puedo ejecutar la PoC en una máquina virtual?

    Sí, la PoC también funciona en máquinas virtuales. Sin embargo, debido a la capa adicional introducida por una máquina virtual, puede que no funcione tan bien como en hardware nativo.

  • ¡El programa KASLR (kaslr) no encuentra el desplazamiento!

    La herramienta kaslr solo realiza muy pocas mediciones para ser rápida. Si no encuentra el desplazamiento, hay dos posibilidades:

    • cambiar el número de reintentos en kaslr.c: config.retries = 1000;
    • usar el módulo del kernel en kaslr_offset para leer directamente el desplazamiento desde el kernel. Instale los encabezados del kernel para su kernel (sudo apt-get install linux-headers-`uname -r` ) y ejecute sudo ./direct_physical_map.sh
  • Dijo que funciona en memoria no cacheada, ¡pero todas sus demos aseguran que la memoria esté cacheada!

    Hacer que funcione en memoria no cacheada es más complicado y a menudo requiere un poco de ajuste de los parámetros. Por lo tanto, aseguramos que la memoria esté cacheada en la PoC para que sea más fácil de reproducir. Sin embargo, puede simplemente eliminar el código que cachea los valores y reemplazarlo por un clflush para probar el exploit en memoria no cacheada (consulte el Vídeo n.º 5 para ver un ejemplo). Aunque no estaba en la publicación original del blog de Google, esto también fue confirmado por investigadores independientes (por ejemplo, , , ).

Advertencias

Advertencia n.º 1: Proporcionamos este código tal cual. Usted es responsable de protegerse a sí mismo, a su propiedad y a sus datos, y a los demás, de cualquier riesgo causado por este código. Este código puede provocar un comportamiento inesperado e indeseable en su máquina. Es posible que este código no detecte la vulnerabilidad en su máquina.

Advertencia n.º 2: Si descubre que una computadora es susceptible al error de Meltdown, es posible que desee evitar usarla como sistema multiusuario. Meltdown vulnera la protección de memoria de la CPU. En una máquina susceptible al error de Meltdown, un proceso puede leer todas las páginas usadas por otros procesos o por el kernel.

Advertencia n.º 3: Este código es solo para fines de prueba. No lo ejecute en ningún sistema productivo. No lo ejecute en ningún sistema que pueda ser usado por otra persona o entidad.

Descargar herramienta
Alex Ionescu
Raphael Carvalho
Pavel Boldin
  • Simplemente no funciona en mi computadora, ¿qué puedo hacer?

    Puede haber muchas razones diferentes para ello. Reunimos algunas cosas que puede probar:

    • Asegúrese de que la frecuencia de su CPU esté al máximo y que el escalado de frecuencia esté deshabilitado.
    • Si lo ejecuta en un dispositivo móvil (por ejemplo, una laptop), asegúrese de que esté enchufado para obtener el mejor rendimiento.
    • Intente fijar las herramientas a un núcleo de CPU específico (por ejemplo, con taskset). También pruebe diferentes núcleos y combinaciones de núcleos.
    • Varíe la carga en su computadora. En algunas máquinas funciona mejor si la carga es mayor, en otras funciona mejor si la carga es menor.
    • Intente deshabilitar el hyperthreading en la BIOS. En algunas computadoras funciona mucho mejor si el hyperthreading está deshabilitado.
    • Use una variante diferente de Meltdown. Esto se puede cambiar en libkdump/libkdump.c en la línea #define MELTDOWN meltdown_nonull. Pruebe, por ejemplo, meltdown en lugar de meltdown_nonull, que funciona mucho mejor en algunas máquinas (pero no funciona en absoluto en otras).
    • Intente crear muchas interrupciones, por ejemplo ejecutando la herramienta stress con stress -i 2 (u otros valores para el parámetro i, según el número de núcleos).
    • Intente reiniciar las demos y también su computadora. Especialmente después de una suspensión, los tiempos se rompen en algunas computadoras.
    • Juegue con los parámetros de libkdump, por ejemplo aumente el número de reintentos y/o mediciones.