Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Linpmem — Driver del kernel Linux per l'acquisizione di memoria fisica, che consente l'accesso in lettura a qualsiasi indirizzo fisico, inclusi memoria riservata e buchi di memoria, con informazioni CR3 e servizi di traduzione da virtuale a fisico. | Kitploit
Strumenti/GitHubGitHub/velocidex/linpmem
Memory ForensicsInformatica ForenseDigital ForensicsRisposta agli Incidenti
GitHubvelocidex/linpmem

Linpmem

Driver del kernel Linux per l'acquisizione di memoria fisica, che consente l'accesso in lettura a qualsiasi indirizzo fisico, inclusi memoria riservata e buchi di memoria, con informazioni CR3 e servizi di traduzione da virtuale a fisico.

Vedi Repository
105121 anno faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Linpmem — uno strumento di acquisizione della memoria fisica per Linux

alt text

Linpmem è uno strumento solo per Linux x64 per leggere la memoria fisica.

Come la sua controparte Windows, Winpmem, non è uno strumento tradizionale di dump della memoria. Linpmem offre un'API per leggere da qualsiasi indirizzo fisico, inclusa la memoria riservata e i buchi di memoria, ma può essere utilizzato anche per il normale dump della memoria. Inoltre, il driver offre una varietà di modalità di accesso per leggere la memoria fisica, come le modalità byte, word, dword, qword e buffer, dove la modalità buffer è appropriata nella maggior parte dei casi standard. Se la lettura richiede una lettura allineata byte/word/dword/qword, Linpmem farà esattamente questo.

Attualmente, le funzionalità di Linpmem includono:

  1. Lettura da indirizzo fisico (modalità di accesso byte, word, dword, qword o buffer)
  2. Servizio informazioni CR3 (specificare il processo di destinazione tramite pid)
  3. Servizio di traduzione da indirizzo virtuale a fisico

Il controllo della cache verrà aggiunto in futuro per supportare le modalità di accesso specializzate.

Tabella riassuntiva

  • Costruire il driver del kernel
  • Caricare il driver
  • Utilizzo
    • Codice dimostrativo
    • Strumento CLI
    • Libreria
    • Strumento di dump della memoria
  • Libreria
  • Distribuzioni Linux testate
  • Gestione dell'avvio protetto (Secure Boot)
  • Problemi noti
  • In lavorazione
  • Lavori futuri
  • Riconoscimenti

Costruire il driver del kernel

Almeno per ora, devi compilare il driver Linpmem da solo. È in lavorazione, ma non ancora terminato, un metodo per caricare un driver Linpmem precompilato su altri sistemi Linux. Detto questo, compilare il driver Linpmem non è difficile, sostanzialmente si esegue 'make'.

Passo 1 - Ottenere gli header giusti

Hai bisogno di make e di un compilatore C. (Raccomandiamo gcc, ma anche clang dovrebbe funzionare).

Assicurati di avere installati i linux-headers (usando qualsiasi gestore di pacchetti abbia la tua distribuzione Linux di destinazione). Il nome esatto del pacchetto può variare a seconda della distribuzione. Un modo rapido (indipendente dalla distribuzione) per verificare se hai il pacchetto installato:

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

Questo è tutto, puoi procedere al passo 2.

Sistema estraneo: Attualmente, se vuoi compilare il driver per un altro sistema, ad esempio perché vuoi creare un dump della memoria ma non puoi compilare sulla macchina di destinazione, devi scaricare il pacchetto header direttamente dai repository dei pacchetti della distribuzione Linux di quel sistema. Ricontrolla che la versione del pacchetto corrisponda esattamente alla versione della release e del kernel in esecuzione sul sistema estraneo. Se l'altro sistema utilizza un kernel auto-compilato, devi ottenere una copia della directory di compilazione di quel kernel. Quindi, imposta il percorso di una delle due directory nella variabile d'ambiente KDIR.

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

Passo 2 - make

Compilare il driver è semplice, basta digitare:

root@kitploit:~
make

Questo dovrebbe produrre linpmem.ko nella directory di lavoro corrente.

Potresti voler controllare precompiler.h prima e scegliere se compilare per release o debug (ad esempio, con stampa di debug). Al momento non ci sono molte altre impostazioni del precompilatore.

Caricare il driver

Il modulo linpmem.ko può essere caricato usando insmod path-to-linpmem.ko e rimosso con rmmod path-to-linpmem.ko. (Questo caricherà il driver solo per questa sessione di uptime.) Se hai compilato per debug, dai anche un'occhiata a dmesg.

Dopo il caricamento, per comunicare con il driver, devi creare il dispositivo:

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

Se non riesci a comunicare con il driver, controlla potenzialmente il log di dmesg per verificare che '42' sia effettivamente il major registrato:

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

Anche se di solito il kernel cerca di assegnare effettivamente questo numero.

Puoi usare chown sul dispositivo per darlo al tuo utente, se non vuoi tenere aperta una console di root tutto il tempo. (O usa semplicemente una console di root.)

  • Controlla l'output di dmesg. Segnala errori se ne vedi!
  • Attenzione: se c'è un messaggio di errore dmesg da Linpmem che dice di riavviare, è meglio farlo immediatamente.
  • Attenzione: questa è una versione iniziale.

Utilizzo

Codice dimostrativo

C'è un codice di esempio che mostra e spiega (in dettaglio) come interagire con il driver. Il riferimento all'API user-space può essere trovato inoltre in ./userspace_interface/linpmem_shared.h.

  1. cd demo
  2. gcc -o test test.c
  3. (sudo) ./test // <= hai bisogno di sudo se non hai usato chown sul dispositivo.

Questo codice è importante se vuoi capire come interagire direttamente con il driver invece di usare una libreria. Può anche essere usato come un breve test di funzionalità.

Strumento da riga di comando

C'è uno strumento da riga di comando (opzionale) per Linpmem, lo strumento CLI pmem. Si trova qui: https://github.com/vobst/linpmem-cli. Oltre al codice sorgente, sono disponibili anche uno strumento CLI precompilato, così come la libreria statica precompilata e gli header, che possono essere trovati qui (firmati). Nota: questa è una versione preliminare, controlla gli aggiornamenti, poiché molte aggiunte e migliorie seguiranno a breve.

Lo strumento CLI pmem può essere utilizzato per testare le varie funzioni di Linpmem in modo (relativamente) sicuro e comodo. Linpmem può anche essere caricato da questo strumento invece di usare insmod/rmmod, con alcune opzioni extra in futuro. Questo ha anche il vantaggio che pmem crea automaticamente il dispositivo giusto per te per un uso immediato. È estremamente portabile e funziona su qualsiasi sistema Linux (e, di fatto, è stato testato anche su un Linux 2.6).

root@kitploit:~
$ ./pmem -h
Client da riga di comando per il driver linpmem

Utilizzo: pmem [OPZIONI] [COMANDO]

Comandi:
  insmod  Carica il driver linpmem
  help    Stampa questo messaggio o l'aiuto del sottocomando specificato

Opzioni:
  -a, --address <INDIRIZZO>             Indirizzo per operazioni di lettura fisica
  -v, --virt-address <VIRT_ADDRESS>     Traduci l'indirizzo nello spazio di indirizzi del processo di destinazione (predefinito: processo corrente)
  -s, --size <DIMENSIONE>               Dimensione delle operazioni di lettura buffer
  -m, --mode <MODALITÀ>                 Modalità di accesso per le operazioni di lettura [valori possibili: byte, word, dword, qword, buffer]
  -p, --pid <PID>                       Processo di destinazione per informazioni cr3 e traduzioni virtuale-fisica
      --cr3                             Interroga il valore cr3 del processo di destinazione (predefinito: processo corrente)
      --verbose                         Mostra output di debug
  -h, --help                            Stampa l'aiuto (vedi di più con '--help')
  -V, --version                         Stampa la versione

Se vuoi compilare lo strumento CLI da solo, spostati nella sua directory e segui le istruzioni nel Readme (del CLI) per costruirlo. Altrimenti, scarica semplicemente il programma precompilato, dovrebbe funzionare su qualsiasi Linux. Per caricare il driver del kernel con lo strumento CLI:

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

Il vantaggio di usare lo strumento pmem per caricare il driver è che non devi creare tu stesso il file del dispositivo e offrirà (nelle prossime release) di scegliere chi possiede il dispositivo linpmem.

Librerie

Lo strumento da riga di comando pmem è solo un sottile wrapper attorno a una piccola libreria Rust che espone un'API per interfacciarsi con il driver. Gli utenti più avanzati possono anche usare questa libreria. La libreria viene compilata automaticamente (come libreria statica portabile) insieme allo strumento CLI pmem quando si compila da https://github.com/vobst/linpmem-cli, ma è anche inclusa (precompilata) qui (firmata). Nota: questa è una versione preliminare, ne seguiranno altre a breve.

Se non vuoi usare la libreria usermode e preferisci interfacciarti direttamente con il driver da solo, puoi trovare la sua API/interfaccia user-space e la documentazione in ./userspace_interface/linpmem_shared.h. Forniamo anche il codice di esempio in demo/test.c che spiega come usare il driver direttamente.

Wrapper Python

LinPyMem: Un wrapper Python per il driver linpmem. Disponibile su PyPI.

Strumento di dump della memoria

Non ancora implementato.

Distribuzioni Linux testate

  • Debian, kernel 6.4.X auto-compilato, Qemu/KVM, non paravirtualizzato.
    • PTI: disattivato/attivato
  • Debian 12, Qemu/KVM, completamente paravirtualizzato.
    • PTI: attivato
  • Ubuntu server, Qemu/KVM, non paravirtualizzato.
    • PTI: attivato
  • Fedora 38, Qemu/KVM, completamente paravirtualizzato.
    • PTI: attivato
  • Test baremetal Linux, AMI BIOS: Linux 6.4.4
    • PTI: attivato
  • Test baremetal Linux, HP: Linux 6.4.4
    • PTI: attivato
  • Baremetal, Arch[-hardened], Dell BIOS, Linux 6.4.X
  • Baremetal, Debian, 6.1.X
  • Baremetal, Ubuntu 20.04 con Secure Boot attivo. Funziona, ma firma prima il driver.
  • Baremetal, Ubuntu 22.04, Linux 6.2.X

Gestione dell'avvio protetto (Secure Boot)

Se il sistema segnala il seguente messaggio di errore durante il caricamento del modulo, potrebbe essere a causa dell'avvio protetto:

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

Ci sono diversi modi per caricare comunque il modulo. Quello ovvio è disabilitare l'avvio protetto nelle impostazioni UEFI.

Se la tua distribuzione lo supporta, una soluzione più elegante è firmare il modulo prima di utilizzarlo. Questo può essere fatto con i seguenti passaggi (testato su Ubuntu 20.04).

  1. Installare mokutil:
    root@kitploit:~
    $ sudo apt install mokutil
    
  2. Creare il materiale della chiave di 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/"
    
    Assicurati di regolare le opzioni in base alle tue esigenze. In particolare, considera la lunghezza della chiave (-newkey), la validità (-days), l'opzione per impostare una frase di passaggio per la chiave (-nodes; omettila se vuoi impostare una frase di passaggio) e il nome comune da includere nel certificato (-subj).
  3. Registrare il nuovo MOK:
    root@kitploit:~
    $ sudo mokutil --import mok-signing.crt
    
    Ti verrà chiesta una password, necessaria per il passaggio successivo. Considera l'uso di una password che puoi digitare su una tastiera con layout US.
  4. Riavviare il sistema. Entrerà in un menu di registrazione MOK. Segui le istruzioni per registrare la tua nuova chiave.
  5. Firmare il modulo Una volta che MOK è registrato, puoi firmare il tuo modulo.
    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
    

Successivamente, dovresti essere in grado di caricare il modulo.

Tieni presente che, dal punto di vista della preparazione forense, dovresti preparare un modulo firmato prima di averne bisogno, poiché il sistema si riavvierà due volte durante il processo sopra descritto, distruggendo la maggior parte dei tuoi dati volatili in memoria.

Problemi noti

  • La lettura di pagine huge (grandi) non è implementata. Per ora, Linpmem riconosce una pagina huge e rifiuta la lettura.
  • La lettura da spazio I/O e DMA mappato verrà eseguita con la cache della CPU abilitata.
  • Non vengono acquisiti blocchi (lock) durante la scansione della tabella delle pagine. Ciò potrebbe portare a risultati divertenti quando sono in corso modifiche concorrenti. Questo è un problema generale e (per lo più insolubile) della lettura della RAM live, senza fermare completamente l'intero sistema operativo.
  • Avvio protetto (Ubuntu): per favore firma il tuo driver prima di usarlo.
  • Qualsiasi crittografia della memoria basata sulla CPU, ad esempio AMD SME, Intel SGX/TDX, ...
  • Chip Pluton?

(Per favore segnala eventuali problemi potenziali se ne incontri.)

In lavorazione

  • Caricamento del driver precompilato su qualsiasi Linux.
  • Controllo della cache del processore. Esempio: per lettura non cache dello spazio I/O e DMA mappato.

Lavori futuri

  • Supporto Arm/Mips. (lavoro futuro lontano)
  • Kernel legacy (come 2.6), kernel basati su Unix

Riconoscimenti

Linpmem, così come Winpmem, non esisterebbero senza il lavoro dei nostri predecessori del (ora ritirato) progetto REKALL: https://github.com/google/rekall.

  • Vorremmo ringraziare Mike Cohen e Johannes Stüttgen per il loro lavoro pionieristico e il contributo open source sul re-mapping PTE, una tecnica ancora in uso 10 anni dopo.

I nostri contributori open source:

  • Viviane Zwanger
  • Valentin Obst
Scarica lo strumento