Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Linpmem — Linux-Kernel-Treiber zur Erfassung des physischen Speichers, der Lesezugriff auf jede physische Adresse ermöglicht, einschließlich reserviertem Speicher und Speicherlücken, mit CR3-Informationen und Diensten zur virtuell-physischen Adressübersetzung. | Kitploit
Tools/GitHubGitHub/velocidex/linpmem
SpeicherforensikForensikDigitale ForensikIncident Response
GitHubvelocidex/linpmem

Linpmem

Linux-Kernel-Treiber zur Erfassung des physischen Speichers, der Lesezugriff auf jede physische Adresse ermöglicht, einschließlich reserviertem Speicher und Speicherlücken, mit CR3-Informationen und Diensten zur virtuell-physischen Adressübersetzung.

Repository anzeigen
105122vor 1 JahrVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Linpmem -- ein Tool zur Erfassung des physischen Arbeitsspeichers für Linux

alt text

Linpmem ist ein reines Linux-x64-Tool zum Lesen des physischen Arbeitsspeichers.

Wie sein Windows-Pendant Winpmem ist dies kein traditioneller Memory-Dumper. Linpmem bietet eine API zum Lesen von jeder physischen Adresse, einschließlich reserviertem Speicher und Speicherlöchern, kann aber auch für normales Speicher-Dumping verwendet werden. Darüber hinaus bietet der Treiber eine Vielzahl von Zugriffsmodi zum Lesen des physischen Arbeitsspeichers, wie Byte-, Word-, Dword-, Qword- und Puffer-Zugriffsmodus, wobei der Puffer-Zugriffsmodus in den meisten Standardfällen geeignet ist. Wenn das Lesen einen ausgerichteten Byte-/Word-/Dword-/Qword-Lesezugriff erfordert, führt Linpmem genau das aus.

Derzeit bietet Linpmem folgende Funktionen:

  1. Lesen von einer physischen Adresse (Zugriffsmodus Byte, Word, Dword, Qword oder Puffer)
  2. CR3-Informationsdienst (Zielprozess per PID angeben)
  3. Dienst zur Übersetzung virtueller in physische Adressen

Cache Control wird in Zukunft hinzugefügt, um die spezialisierten Lesezugriffsmodi zu unterstützen.

Übersichtstabelle

  • Erstellen des Kernel-Treibers
  • Laden des Treibers
  • Verwendung
    • Beispielcode
    • CLI-Tool
    • Bibliothek
    • Memdumping-Tool
  • Bibliothek
  • Getestete Linux-Distributionen
  • Umgang mit Secure Boot
  • Bekannte Probleme
  • In Arbeit
  • Zukünftige Arbeiten
  • Danksagungen

Erstellen des Kernel-Treibers

Zumindest vorerst müssen Sie den Linpmem-Treiber selbst kompilieren. Eine Methode zum Laden eines vorkompilierten Linpmem-Treibers auf anderen Linux-Systemen befindet sich derzeit in Arbeit, ist aber noch nicht abgeschlossen. Das Kompilieren des Linpmem-Treibers ist dennoch nicht schwierig, im Grunde genügt die Ausführung von 'make'.

Schritt 1 - Die richtigen Header besorgen

Sie benötigen make und einen C-Compiler (wir empfehlen gcc, aber clang sollte auch funktionieren).

Stellen Sie sicher, dass die linux-headers installiert sind (mit dem Paketmanager Ihrer Ziel-Linux-Distribution). Der genaue Paketname kann je nach Distribution variieren. Eine schnelle (distributionsunabhängige) Methode, um zu überprüfen, ob das Paket installiert ist:

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

Das war's, Sie können mit Schritt 2 fortfahren.

Fremdsystem: Derzeit müssen Sie, wenn Sie den Treiber für ein anderes System kompilieren möchten, z. B. weil Sie einen Speicherabbild erstellen möchten, aber auf dem Zielsystem nicht kompilieren können, das Header-Paket direkt aus den Paketquellen der Linux-Distribution dieses Systems herunterladen. Überprüfen Sie unbedingt, ob die Paketversion exakt mit der auf dem Fremdsystem laufenden Release- und Kernelversion übereinstimmt. Falls das andere System einen selbst kompilierten Kernel verwendet, müssen Sie eine Kopie des Build-Verzeichnisses dieses Kernels besorgen. Legen Sie dann den Pfad zu einem dieser Verzeichnisse in der Umgebungsvariablen KDIR fest.

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

Schritt 2 - make

Das Kompilieren des Treibers ist einfach, geben Sie einfach ein:

root@kitploit:~
make

Dies sollte linpmem.ko im aktuellen Arbeitsverzeichnis erzeugen.

Sie sollten vorher precompiler.h überprüfen und wählen, ob Sie für Release oder Debug kompilieren möchten (z. B. mit Debug-Ausgabe). Es gibt derzeit nicht viele andere Precompiler-Einstellungen.

Laden des Treibers

Das Modul linpmem.ko kann mit insmod path-to-linpmem.ko geladen und mit rmmod path-to-linpmem.ko entladen werden. (Dadurch wird der Treiber nur für diese Betriebszeit geladen.) Wenn Sie für Debug kompiliert haben, werfen Sie auch einen Blick auf dmesg.

Nach dem Laden müssen Sie das Gerät erstellen, um mit dem Treiber zu kommunizieren:

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

Wenn Sie nicht mit dem Treiber kommunizieren können, überprüfen Sie ggf. im dmesg-Protokoll, ob '42' tatsächlich die registrierte Major-Nummer ist:

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

Normalerweise versucht der Kernel jedoch, diese Nummer tatsächlich zuzuweisen.

Sie können chown auf dem Gerät verwenden, um es Ihrem Benutzer zu geben, wenn Sie nicht ständig eine Root-Konsole offen halten möchten. (Oder verwenden Sie sie einfach weiter in einer Root-Konsole.)

  • Beobachten Sie die dmesg-Ausgabe. Bitte melden Sie Fehler, falls welche auftreten!
  • Warnung: Wenn in dmesg eine Fehlermeldung von Linpmem erscheint, die zum Neustart auffordert, führen Sie diesen besser sofort durch.
  • Warnung: Dies ist eine frühe Version.

Verwendung

Beispielcode

Es gibt einen Beispielcode, der detailliert zeigt und erklärt, wie mit dem Treiber interagiert wird. Die Referenz für die Benutzerraum-API finden Sie außerdem in ./userspace_interface/linpmem_shared.h.

  1. cd demo
  2. gcc -o test test.c
  3. (sudo) ./test // <= Sie benötigen sudo, wenn Sie kein chown auf dem Gerät verwendet haben.

Dieser Code ist wichtig, wenn Sie verstehen möchten, wie Sie direkt mit dem Treiber interagieren, anstatt eine Bibliothek zu verwenden. Er kann auch als kurzer Funktionstest verwendet werden.

Kommandozeilen-Schnittstelle (CLI-Tool)

Es gibt ein (optionales) grundlegendes Kommandozeilen-Tool für Linpmem, das pmem CLI-Tool. Es ist hier zu finden: https://github.com/vobst/linpmem-cli. Neben dem Quellcode gibt es auch ein vorkompiliertes CLI-Tool sowie die vorkompilierte statische Bibliothek und Header, die hier (signiert) zu finden sind. Hinweis: Dies ist eine vorläufige Version, überprüfen Sie unbedingt auf Updates, da bald viele Ergänzungen und Verbesserungen folgen werden.

Das pmem CLI-Tool kann zum Testen der verschiedenen Funktionen von Linpmem auf eine (relativ) sichere und bequeme Weise verwendet werden. Linpmem kann auch mit diesem Tool anstatt mit insmod/rmmod geladen werden, mit einigen zusätzlichen Optionen in Zukunft. Dies hat auch den Vorteil, dass pmem automatisch das richtige Gerät für die sofortige Nutzung erstellt. Es ist extrem portabel und läuft auf jedem Linux-System (und wurde tatsächlich sogar auf einem Linux 2.6 getestet).

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

Wenn Sie das CLI-Tool selbst kompilieren möchten, wechseln Sie in dessen Verzeichnis und befolgen Sie die Anweisungen in der (CLI-)Readme, um es zu bauen. Andernfalls laden Sie einfach das vorgefertigte Programm herunter, es sollte auf jedem Linux funktionieren. Um den Kernel-Treiber mit dem CLI-Tool zu laden:

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

Der Vorteil der Verwendung des pmem-Tools zum Laden des Treibers besteht darin, dass Sie die Gerätedatei nicht selbst erstellen müssen, und es wird (in den nächsten Versionen) anbieten, zu wählen, wem das linpmem-Gerät gehört.

Bibliotheken

Das pmem-Kommandozeilen-Tool ist nur ein dünner Wrapper um eine kleine Rust-Bibliothek, die eine API für die Schnittstelle zum Treiber bereitstellt. Fortgeschrittene Benutzer können diese Bibliothek ebenfalls verwenden. Die Bibliothek wird beim Kompilieren von https://github.com/vobst/linpmem-cli automatisch (als statische portable Bibliothek) zusammen mit dem pmem CLI-Tool kompiliert, aber auch (vorkompiliert) hier (signiert) beigelegt. Hinweis: Dies ist eine vorläufige Version, weitere werden bald folgen.

Wenn Sie die Benutzermodus-Bibliothek nicht verwenden und lieber direkt mit dem Treiber interagieren möchten, finden Sie die Benutzerraum-API/Schnittstelle und Dokumentation in ./userspace_interface/linpmem_shared.h. Wir stellen auch Beispielcode in demo/test.c zur Verfügung, der erklärt, wie man den Treiber direkt verwendet.

Python-Wrapper

LinPyMem: Ein Python-Wrapper für den linpmem-Treiber. Verfügbar auf PyPI.

Memdumping-Tool

Noch nicht implementiert.

Getestete Linux-Distributionen

  • Debian, selbst kompilierter 6.4.X, Qemu/KVM, nicht paravirtualisiert.
    • PTI: aus/ein
  • Debian 12, Qemu/KVM, vollständig paravirtualisiert.
    • PTI: an
  • Ubuntu Server, Qemu/KVM, nicht paravirtualisiert.
    • PTI: an
  • Fedora 38, Qemu/KVM, vollständig paravirtualisiert.
    • PTI: an
  • Bare-Metal-Linux-Test, AMI BIOS: Linux 6.4.4
    • PTI: an
  • Bare-Metal-Linux-Test, HP: Linux 6.4.4
    • PTI: an
  • Bare Metal, Arch[-hardened], Dell BIOS, Linux 6.4.X
  • Bare Metal, Debian, 6.1.X
  • Bare Metal, Ubuntu 20.04 mit aktiviertem Secure Boot. Funktioniert, aber signieren Sie den Treiber zuerst.
  • Bare Metal, Ubuntu 22.04, Linux 6.2.X

Umgang mit Secure Boot

Wenn das System beim Laden des Moduls die folgende Fehlermeldung anzeigt, könnte dies an Secure Boot liegen:

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

Es gibt verschiedene Möglichkeiten, das Modul dennoch zu laden. Die offensichtlichste ist, Secure Boot in Ihren UEFI-Einstellungen zu deaktivieren.

Wenn Ihre Distribution dies unterstützt, wäre eine elegantere Lösung, das Modul vor der Verwendung zu signieren. Dies kann mit den folgenden Schritten durchgeführt werden (getestet auf Ubuntu 20.04).

  1. Installieren Sie mokutil:
    root@kitploit:~
    $ sudo apt install mokutil
    
  2. Erstellen Sie das Signierungsschlüsselmaterial:
    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/"
    
    Stellen Sie sicher, dass Sie die Optionen an Ihre Bedürfnisse anpassen. Beachten Sie insbesondere die Schlüssellänge (-newkey), die Gültigkeit (-days), die Option zum Festlegen einer Passphrase für den Schlüssel (-nodes; lassen Sie es aus, wenn Sie eine Passphrase festlegen möchten) und den Common Name, der in das Zertifikat aufgenommen werden soll (-subj).
  3. Registrieren Sie den neuen MOK:
    root@kitploit:~
    $ sudo mokutil --import mok-signing.crt
    
    Sie werden nach einem Passwort gefragt, das im nächsten Schritt benötigt wird. Verwenden Sie ein Passwort, das Sie auf einem US-Tastaturlayout eingeben können.
  4. Starten Sie das System neu. Es wird ein MOK-Enrollment-Menü angezeigt. Befolgen Sie die Anweisungen, um Ihren neuen Schlüssel zu registrieren.
  5. Signieren Sie das Modul Sobald der MOK registriert ist, können Sie Ihr Modul signieren.
    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
    

Danach sollten Sie das Modul laden können.

Beachten Sie, dass Sie aus forensischer Bereitschaftsperspektive ein signiertes Modul vorbereiten sollten, bevor Sie es benötigen, da das System während des oben beschriebenen Vorgangs zweimal neu startet und dabei die meisten Ihrer flüchtigen Daten im Arbeitsspeicher zerstört.

Bekannte Probleme

  • Das Lesen von Huge Pages ist nicht implementiert. Linpmem erkennt eine Huge Page und lehnt das Lesen vorerst ab.
  • Das Lesen von gemapptem E/A- und DMA-Bereich erfolgt mit aktiviertem CPU-Caching.
  • Während des Seitentabellendurchlaufs werden keine Sperren verwendet. Dies kann zu kuriosen Ergebnissen führen, wenn gleichzeitige Änderungen stattfinden. Dies ist ein allgemeines und (meist unlösbares) Problem des Live-RAM-Lesens, ohne das gesamte Betriebssystem anzuhalten.
  • Secure Boot (Ubuntu): Bitte signieren Sie Ihren Treiber vor der Verwendung.
  • Jede CPU-basierte Speicherverschlüsselung, z. B. AMD SME, Intel SGX/TDX, ...
  • Pluton-Chips?

(Bitte melden Sie potenzielle Probleme, falls Ihnen etwas auffällt.)

In Arbeit

  • Laden eines vorkompilierten Treibers auf jedem Linux.
  • Prozessor-Cache-Steuerung. Beispiel: für ungepuffertes Lesen von gemapptem E/A- und DMA-Bereich.

Zukünftige Arbeiten

  • Arm/MIPS-Unterstützung (ferne Zukunft)
  • Legacy-Kernel (wie 2.6), unixbasierte Kernel

Danksagungen

Linpmem sowie Winpmem wären ohne die Arbeit unserer Vorgänger des (inzwischen eingestellten) REKALL-Projekts nicht möglich: https://github.com/google/rekall.

  • Wir möchten Mike Cohen und Johannes Stüttgen für ihre Pionierarbeit und ihren Open-Source-Beitrag zum PTE-Remapping danken, einer Technik, die auch 10 Jahre später noch verwendet wird.

Unsere Open-Source-Mitwirkenden:

  • Viviane Zwanger
  • Valentin Obst
Tool herunterladen