Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
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
Linpmem — Controlador del kernel de Linux para la adquisición de memoria física, que permite acceso de lectura a cualquier dirección física, incluyendo memoria reservada y agujeros de memoria, con información de CR3 y servicios de traducción de virtual a físico. | Kitploit
Herramientas/GitHubGitHub/velocidex/linpmem
Forensia de MemoriaAnálisis ForenseForensia DigitalRespuesta a Incidentes
GitHubvelocidex/linpmem

Linpmem

Controlador del kernel de Linux para la adquisición de memoria física, que permite acceso de lectura a cualquier dirección física, incluyendo memoria reservada y agujeros de memoria, con información de CR3 y servicios de traducción de virtual a físico.

Ver Repositorio
105122hace 1 añoRevisado 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

Linpmem -- una herramienta de adquisición de memoria física para Linux

alt text

Linpmem es una herramienta solo para Linux x64 para leer memoria física.

Al igual que su contraparte de Windows, Winpmem, esta no es una herramienta tradicional de volcado de memoria. Linpmem ofrece una API para leer desde cualquier dirección física, incluyendo memoria reservada y agujeros de memoria, pero también se puede usar para volcado de memoria normal. Además, el controlador ofrece una variedad de modos de acceso para leer memoria física, como modo de acceso byte, word, dword, qword y buffer, donde el modo de acceso buffer es apropiado en la mayoría de los casos estándar. Si la lectura requiere una lectura alineada de byte/word/dword/qword, Linpmem hará precisamente eso.

Actualmente, las características de Linpmem son:

  1. Leer desde dirección física (modo de acceso byte, word, dword, qword o buffer)
  2. Servicio de información CR3 (especificar proceso objetivo por pid)
  3. Servicio de traducción de dirección virtual a física

El Control de Caché se agregará en el futuro para soportar los modos de acceso de lectura especializados.

Tabla de resumen

  • Compilación del controlador del kernel
  • Carga del controlador
  • Uso
    • Código de demostración
    • Herramienta de línea de comandos
    • Biblioteca
    • Herramienta de volcado de memoria
  • Biblioteca
  • Distribuciones de Linux probadas
  • Manejo de Secure Boot
  • Problemas conocidos
  • En desarrollo
  • Trabajo futuro
  • Agradecimientos

Building the kernel driver

Al menos por ahora, debes compilar el controlador Linpmem tú mismo. Un método para cargar un controlador Linpmem precompilado en otros sistemas Linux está actualmente en desarrollo, pero aún no está terminado. Dicho esto, compilar el controlador Linpmem no es difícil, básicamente es ejecutar 'make'.

Paso 1 - obtener los encabezados correctos

Necesitas make y un compilador de C. (Recomendamos gcc, pero clang también debería funcionar).

Asegúrate de tener linux-headers instalado (usando el gestor de paquetes que tenga tu distribución de Linux). El nombre exacto del paquete puede variar según tu distribución. Una forma rápida (independiente de la distribución) de verificar si tienes el paquete instalado:

root@kitploit:~
ls -l /usr/lib/modules/`uname -r`/

Eso es todo, puedes proceder al paso 2.

Sistema externo: Actualmente, si deseas compilar el controlador para otro sistema, por ejemplo, porque quieres crear un volcado de memoria pero no puedes compilar en el destino, debes descargar el paquete de encabezados directamente desde los repositorios de paquetes de la distribución de Linux de ese sistema. Verifica que la versión del paquete coincida exactamente con la versión de lanzamiento y kernel que se ejecuta en el sistema externo. Si el otro sistema utiliza un kernel compilado por uno mismo, debes obtener una copia del directorio de compilación de ese kernel. Luego, coloca la ubicación de cualquiera de los directorios en la variable de entorno KDIR.

root@kitploit:~
export KDIR=path/to/extracted/header/package/or/kernel/root

Paso 2 - make

Compilar el controlador es simple, solo escribe:

root@kitploit:~
make

Esto debería producir linpmem.ko en el directorio de trabajo actual.

Es posible que desees revisar precompiler.h antes y elegir si compilar para lanzamiento o depuración (por ejemplo, con impresión de depuración). No hay muchas otras configuraciones de precompilador en este momento.

Carga del controlador

El módulo linpmem.ko se puede cargar usando insmod path-to-linpmem.ko, y descargar con rmmod path-to-linpmem.ko. (Esto cargará el controlador solo para este tiempo de actividad). Si compilaste para depuración, echa un vistazo a dmesg.

Después de cargar, para comunicarte con el controlador, necesitas crear el dispositivo:

root@kitploit:~
mknod /dev/linpmem c 42 0

Si no puedes comunicarte con el controlador, potencialmente verifica en el registro de dmesg para confirmar que '42' fue efectivamente el major registrado:

root@kitploit:~
[12827.900168] linpmem: registered chrdev with major 42

Aunque normalmente el kernel intentaría asignar este número realmente.

Puedes usar chown en el dispositivo para asignarlo a tu usuario, si no quieres tener una consola de root abierta todo el tiempo. (O simplemente sigue usándola en una consola de root).

  • Observa la salida de dmesg. ¡Por favor, reporta errores si ves alguno!
  • Advertencia: si hay un mensaje de error de dmesg de Linpmem que indique reiniciar, es mejor hacerlo inmediatamente.
  • Advertencia: esta es una versión temprana.

Uso

Código de demostración

Hay un código de ejemplo que demuestra y explica (en detalle) cómo interactuar con el controlador. La referencia de la API de espacio de usuario también se puede encontrar en ./userspace_interface/linpmem_shared.h.

  1. cd demo
  2. gcc -o test test.c
  3. (sudo) ./test // <= necesitas sudo si no usaste chown en el dispositivo.

Este código es importante si quieres entender cómo interactuar directamente con el controlador en lugar de usar una biblioteca. También se puede usar como una prueba de función breve.

Herramienta de línea de comandos

Hay una herramienta de línea de comandos básica (opcional) para Linpmem, la herramienta CLI pmem. Se puede encontrar aquí: https://github.com/vobst/linpmem-cli. Además del código fuente, también hay una herramienta CLI precompilada, así como la biblioteca estática precompilada y los encabezados que se pueden encontrar aquí (firmados). Nota: esta es una versión preliminar, asegúrate de buscar actualizaciones, ya que muchas adiciones y mejoras seguirán pronto.

La herramienta CLI pmem se puede usar para probar las diversas funciones de Linpmem de una manera (relativamente) segura y conveniente. Linpmem también puede ser cargado por esta herramienta en lugar de usar insmod/rmmod, con algunas opciones adicionales en el futuro. Esto también tiene la ventaja de que pmem crea automáticamente el dispositivo correcto para uso inmediato. Es extremadamente portátil y se ejecuta en cualquier sistema Linux (y, de hecho, se ha probado incluso en un Linux 2.6).

root@kitploit:~
$ ./pmem -h
Command-line client for the linpmem driver

Usage: pmem [OPTIONS] [COMMAND]

Commands:
  insmod  Load the linpmem driver
  help    Print this message or the help of the given subcommand(s)

Options:
  -a, --address <ADDRESS>            Address for physical read operations
  -v, --virt-address <VIRT_ADDRESS>  Translate address in target process' address space (default: current process)
  -s, --size <SIZE>                  Size of buffer read operations
  -m, --mode <MODE>                  Access mode for read operations [possible values: byte, word, dword, qword, buffer]
  -p, --pid <PID>                    Target process for cr3 info and virtual-to-physical translations
      --cr3                          Query cr3 value of target process (default: current process)
      --verbose                      Display debug output
  -h, --help                         Print help (see more with '--help')
  -V, --version                      Print version

Si deseas compilar la herramienta cli tú mismo, cambia a su directorio y sigue las instrucciones en el Readme (cli) para compilarlo. De lo contrario, simplemente descarga el programa precompilado, debería funcionar en cualquier Linux. Para cargar el controlador del kernel con la herramienta cli:

root@kitploit:~
# pmem insmod path/to/linpmem.ko

La ventaja de usar la herramienta pmem para cargar el controlador es que no tienes que crear el archivo de dispositivo tú mismo, y ofrecerá (en las próximas versiones) elegir quién es el propietario del dispositivo linpmem.

Bibliotecas

La interfaz de línea de comandos pmem es solo un envoltorio ligero alrededor de una pequeña biblioteca Rust que expone una API para interactuar con el controlador. Los usuarios más avanzados también pueden usar esta biblioteca. La biblioteca se compila automáticamente (como biblioteca estática portátil) junto con la herramienta cli pmem al compilar desde https://github.com/vobst/linpmem-cli, pero también se incluye (precompilada) aquí (firmada). Nota: esta es una versión preliminar, más por venir pronto.

Si no deseas usar la biblioteca en modo usuario y prefieres interactuar con el controlador directamente por tu cuenta, puedes encontrar su API/interfaz de espacio de usuario y documentación en ./userspace_interface/linpmem_shared.h. También proporcionamos código de ejemplo en demo/test.c que explica cómo usar el controlador directamente.

Wrapper de Python

LinPyMem: Un wrapper de Python para el controlador linpmem. Disponible en PyPI.

Herramienta de volcado de memoria

Aún no implementada.

Distribuciones de Linux probadas

  • Debian, compilado por uno mismo 6.4.X, Qemu/KVM, no paravirtualizado.
    • PTI: off/on
  • Debian 12, Qemu/KVM, totalmente paravirtualizado.
    • PTI: on
  • Ubuntu server, Qemu/KVM, no paravirtualizado.
    • PTI: on
  • Fedora 38, Qemu/KVM, totalmente paravirtualizado.
    • PTI: on
  • Prueba en Linux baremetal, AMI BIOS: Linux 6.4.4
    • PTI: on
  • Prueba en Linux baremetal, HP: Linux 6.4.4
    • PTI: on
  • Baremetal, Arch[-hardened], Dell BIOS, Linux 6.4.X
  • Baremetal, Debian, 6.1.X
  • Baremetal, Ubuntu 20.04 con Secure Boot activado. Funciona, pero firmar el controlador primero.
  • Baremetal, Ubuntu 22.04, Linux 6.2.X

Manejo de Secure Boot

Si el sistema reporta el siguiente mensaje de error al cargar el módulo, podría deberse a Secure Boot:

root@kitploit:~
$ sudo insmod linpmem.ko
insmod: ERROR: could not insert module linpmem.ko: Operation not permitted

Hay diferentes formas de cargar el módulo de todas formas. La más obvia es deshabilitar Secure Boot en la configuración de UEFI.

Si tu distribución lo soporta, una solución más elegante sería firmar el módulo antes de usarlo. Esto se puede hacer siguiendo los siguientes pasos (probado en Ubuntu 20.04).

  1. Instalar mokutil:
    root@kitploit:~
    $ sudo apt install mokutil
    
  2. Crear el material de clave de firma:
    root@kitploit:~
    $ openssl req -new -newkey rsa:4096 -keyout mok-signing.key -out mok-signing.crt -outform DER -days 365 -nodes -subj "/CN=Some descriptive name/"
    
    Asegúrate de ajustar las opciones a tus necesidades. Especialmente, considera la longitud de la clave (-newkey), la validez (-days), la opción de establecer una frase de contraseña (-nodes; déjala fuera si quieres establecer una frase de contraseña), y el nombre común a incluir en el certificado (-subj).
  3. Registrar el nuevo MOK:
    root@kitploit:~
    $ sudo mokutil --import mok-signing.crt
    
    Se te pedirá una contraseña, que es necesaria en el siguiente paso. Considera usar una contraseña que puedas escribir en un diseño de teclado estadounidense.
  4. Reiniciar el sistema. Entrará en un menú de inscripción MOK. Sigue las instrucciones para inscribir tu nueva clave.
  5. Firmar el módulo Una vez que el MOK esté inscrito, puedes firmar tu módulo.
    root@kitploit:~
    $ /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 path/to/mok-singing/MOK.key path/to//MOK.cert path/to/linpmem.ko
    

Después de eso, deberías poder cargar el módulo.

Ten en cuenta que, desde una perspectiva de preparación forense, debes preparar un módulo firmado antes de necesitarlo, ya que el sistema se reiniciará dos veces durante el proceso descrito anteriormente, destruyendo la mayoría de tus datos volátiles en la memoria.

Problemas conocidos

  • La lectura de páginas grandes no está implementada. Linpmem reconoce una página grande y rechaza la lectura, por ahora.
  • La lectura desde el espacio de E/S mapeado y DMA se realizará con el caché de CPU habilitado.
  • No se toman bloqueos durante el recorrido de la tabla de páginas. Esto podría llevar a resultados extraños cuando se están realizando modificaciones concurrentes. Este es un problema general y (mayormente irresoluble) de la lectura de RAM en vivo, sin detener todo el sistema operativo por completo.
  • Secure Boot (Ubuntu): por favor firma tu controlador antes de usarlo.
  • Cualquier cifrado de memoria basado en CPU, por ejemplo, AMD SME, Intel SGX/TDX, ...
  • ¿Chips Pluton?

(Por favor, reporta posibles problemas si encuentras algo.)

En desarrollo

  • Carga de controlador precompilado en cualquier Linux.
  • Control de caché del procesador. Ejemplo: para lectura sin caché del espacio de E/S mapeado y DMA.

Trabajo futuro

  • Soporte para Arm/Mips. (trabajo a largo plazo)
  • Kernels heredados (como 2.6), kernels basados en Unix

Agradecimientos

Linpmem, así como Winpmem, no existirían sin el trabajo de nuestros predecesores del proyecto REKALL (ahora retirado): https://github.com/google/rekall.

  • Queremos agradecer a Mike Cohen y Johannes Stüttgen por su trabajo pionero y contribución de código abierto en el reasignación de PTE, una técnica que aún se utiliza 10 años después.

Nuestros contribuyentes de código abierto:

  • Viviane Zwanger
  • Valentin Obst
Descargar herramienta