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
lmg — Script per automatizzare l'acquisizione e l'analisi della memoria Linux | Kitploit
Strumenti/GitHubGitHub/halpomeranz/lmg
Memory ForensicsInformatica ForenseDigital ForensicsRisposta agli Incidenti
GitHubhalpomeranz/lmg

lmg

Script per automatizzare l'acquisizione e l'analisi della memoria Linux

Vedi Repository
275486 anni 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

Linux Memory Grabber Uno script per scaricare la memoria Linux e creare profili Volatility(TM). Hal Pomeranz ([email protected]), 2020-02-01

GRAZIE!

"Se ho visto più lontano è perché stavo sulle spalle di giganti." ~ Issac Newton

Ci sono molte persone che meritano ringraziamenti per aver reso possibile questo piccolo e semplice strumento:

-- Le brave persone di Microsoft per aver reso disponibile AVML

-- Joe Sylve per il suo lavoro su LiME

-- L'intero team di sviluppo di Volatility(TM) per il loro lavoro continuo. Vorrei riconoscere in particolare Andrew Case che ha risposto a una serie di domande fastidiose da parte mia durante lo sviluppo del mio strumento.

-- David Anderson per il suo supporto continuo a libdwarf e dwarfdump

-- Matt Suiche di MoonSols. Quando stavo mettendo insieme il mio strumento, il mio obiettivo di progettazione era "renderlo facile da usare come DumpIt" (se hai bisogno di acquisire memoria Windows, non conosco strumento più facile da usare). Quindi grazie per l'ispirazione, Matt!

-- Persone che hanno fornito idee e codice per migliorare lo strumento:

root@kitploit:~
   Julien -- Directory di output/build alternative ed etichette ID caso, interruzione se non eseguito come root
   Jonathon Poling -- idee simili a quelle di Julien
   Jeff Bryner -- Creazione di file volatilityrc per ogni acquisizione

La comunità è migliore grazie a tutti questi sforzi. Ho scelto di rendere disponibile il mio strumento sotto la licenza Creative Commons "Attribuzione" (CC BY), per renderlo il più ampiamente possibile disponibile.

INFORMAZIONI SULLO STRUMENTO

Per analizzare la memoria Linux, devi prima essere in grado di acquisire la memoria Linux. AVML funziona benissimo, ma se il tuo sistema non ha /proc/kcore o /dev/crash allora avrai bisogno del Linux Memory Extractor (LiME) di Joe Sylve. Ma devi avere un modulo LiME compilato per il kernel del sistema su cui vuoi catturare la RAM.

Volatility(TM) è ottimo per analizzare le immagini di memoria Linux. Ma necessita di un profilo che corrisponda al sistema in cui la memoria è stata acquisita. Costruire un profilo significa compilare un programma C sul sistema appropriato e usare dwarfdump per ottenere gli indirizzi delle importanti strutture dati del kernel. Hai anche bisogno di una copia del file System.map dalla directory /boot.

Ora, se per caso hai un duplicato del tuo sistema di destinazione, puoi costruire il profilo Volatility(TM) sul clone e, se necessario, compilare LiME per catturare e analizzare la memoria dal tuo target. Ma ci sono molte situazioni in cui un duplicato del sistema di destinazione non è disponibile. Quindi potresti dover costruire il profilo Volatility(TM) e LiME sulla tua macchina target.

E questo non è per i deboli di cuore. Ci sono diversi passaggi e alcuni comandi Linux di basso livello coinvolti. Il mio obiettivo era creare un pacchetto che potesse essere installato (da un esperto) su una chiavetta USB e distribuito agli agenti sul campo. L'utente della chiavetta USB dovrebbe essere in grado di inserire la chiavetta, eseguire un singolo comando e acquisire con successo un'immagine della memoria della macchina target e un profilo Volatility(TM) funzionante. Il risultato è il mio script lmg (Linux Memory Grabber).

SULLA PUREZZA FORENSE

Se sei un pignolo per la purezza forense, probabilmente questo non è lo strumento per te. Discutiamo alcuni dei modi in cui il mio strumento interagisce con il sistema target:

Supporti rimovibili -- Lo strumento è progettato per essere eseguito da un dispositivo USB portatile come una chiavetta. Collegherai un dispositivo scrivibile al tuo sistema target, dove potrebbe essere preso di mira da utenti malintenzionati o malware presenti sul sistema. L'atto di collegare il dispositivo al sistema cambierà lo stato della macchina (ad esempio, creerà voci di log, voci mtab, ecc.). Se il dispositivo non viene montato automaticamente dal sistema operativo, l'utente deve montare manualmente il dispositivo tramite una shell di root.

Compilazione -- Creare un profilo Volatility(TM) comporta la compilazione di codice sulla macchina target. Lo stesso vale per la compilazione di LiME quando AVML non funziona. Quindi gcc verrà eseguito, verranno letti i file header, collegate le librerie, ecc. lmg cerca di minimizzare l'impatto sul filesystem della macchina target impostando TMPDIR su una directory sul dispositivo USB da cui viene eseguito lmg. Ciò significa che i file intermedi creati dal compilatore verranno scritti sulla chiavetta USB piuttosto che sul filesystem locale della macchina target.

Dipendenze -- Per compilare codice kernel su Linux, la macchina target necessita di un ambiente di sviluppo funzionante con gcc, make, ecc. e tutti i file include e le librerie condivise appropriate. In particolare, i file header del kernel devono essere presenti sulla macchina locale. Queste dipendenze potrebbero non esistere sul target. In questo caso, l'utente si trova di fronte alla scelta di installare le dipendenze appropriate (se possibile) o di non essere in grado di costruire il profilo Volatility(TM) per il sistema.

Malware -- lmg utilizza /bin/bash, gcc, zip e una serie di altri programmi dalla macchina target. Se il sistema è stato compromesso, le applicazioni utilizzate da lmg potrebbero non essere affidabili. Una soluzione più completa sarebbe creare un ambiente di esecuzione sicuro per lmg sul dispositivo USB portatile, ma ciò era al di là dello scopo di questa prova di concetto iniziale.

Memoria -- Tutti i comandi eseguiti causeranno la modifica della memoria del sistema target. L'atto di catturare la RAM creerà sempre artefatti, ma in questo caso c'è un'estesa compilazione, accesso al filesystem, ecc. in aggiunta all'esecuzione di un dump della RAM.

Detto questo, lmg è uno strumento molto comodo per consentire ad agenti meno esperti di catturare dati utili per l'analisi della memoria dai sistemi target.

Nota che se AVML fallisce, lmg cercherà un modulo LiME già esistente sul dispositivo USB che corrisponda alla versione del kernel e all'architettura del processore della macchina target. Se trovato, lmg non si preoccuperà di ricompilare. Allo stesso modo, puoi scegliere di non far creare a lmg il profilo Volatility(TM) per il target per minimizzare l'impatto sul sistema target.

lmg utilizza nomi di percorso relativi quando invoca programmi come gcc e zip. Quindi se desideri eseguire questi programmi da supporti alternativi, aggiorna semplicemente $PATH come appropriato prima di eseguire lmg.

USARE LMG

Per prima cosa, prepara una chiavetta USB secondo le istruzioni nel documento INSTALL fornito con lmg.

Quando desideri acquisire RAM, collega la chiavetta al tuo sistema target. Sulla maggior parte dei sistemi Linux, i nuovi dispositivi USB vengono montati automaticamente sotto /media. Supponiamo che il tuo finisca sotto /media/LMG.

Ora, come root, esegui "/media/LMG/lmg". Questa è la modalità interattiva e all'utente verrà chiesto di confermare prima che lmg costruisca un modulo LiME per il sistema e/o crei un profilo Volatility(TM). Se non vuoi essere interrogato, usa "/media/LMG/lmg -y".

Tutto il resto è automatizzato. Dopo l'esecuzione dello script, avrai una nuova directory sulla chiavetta USB denominata

".../capture/-YYYY-MM-DD_hh.mm.ss"

lmg supporta un'opzione -c per specificare un nome di directory ID caso da utilizzare al posto della directory predefinita "-YYYY-MM-DD_hh.mm.ss".

Qualunque sia il nome della directory utilizzato, la directory conterrà:

-YYYY-MM-DD_hh.mm.ss-memory.lime -- l'acquisizione RAM -YYYY-MM-DD_hh.mm.ss-profile.zip -- profilo Volatility(TM) -YYYY-MM-DD_hh.mm.ss-bash -- copia di /bin/bash del target volatilityrc -- file di configurazione prototipo di Volatility

Il file volatilityrc definisce le posizioni appropriate per la memoria acquisita e il plugin. Vedi ESEMPIO DI UTILIZZO qui sotto per come usare questo file.

La copia di /bin/bash è utile per determinare l'indirizzo della struttura dati della cronologia della shell nella memoria dei processi bash nell'acquisizione di memoria. Vedi https://github.com/volatilityfoundation/volatility/wiki/Linux-Command-Reference#linux_bash per ulteriori dettagli su come utilizzare questo eseguibile (o consulta ESEMPIO DI UTILIZZO qui sotto).

Nota che potrebbero esserci momenti in cui non vuoi scrivere dati sul supporto da cui stai eseguendo lmg, ad esempio se gli strumenti lmg si trovano su supporto di sola lettura come un DVD-ROM. lmg supporta un'opzione -d per specificare una directory di output diversa. Per impostazione predefinita, tutta la compilazione avverrà nella directory di destinazione, ma l'utente può specificare una directory di compilazione alternativa con -B.

ESEMPIO DI UTILIZZO

Ecco un esempio di utilizzo dello strumento lmg, che include l'uso di Volatility(TM) direttamente dalla chiavetta per analizzare l'immagine acquisita. Sulla mia macchina di test, la chiavetta era in /dev/sdb e non è stata montata automaticamente dal mio sistema operativo. Quindi ho fatto tutto manualmente.

  1. Ottenere i privilegi di root e montare la chiavetta

[root@localhost ~]$ sudo -s [sudo] password for lab: [root@localhost lab]# mkdir -p /mnt/usb [root@localhost lab]# mount /dev/sdb1 /mnt/usb

  1. Eseguire lmg

[root@localhost lab]# /mnt/usb/lmg -y AVML is /mnt/usb/avml/avml-x86_64 Dumping memory in "lime" format to /mnt/usb/capture/localhost.localdomain-2020-02-01_08.16.55 This could take a while...Done! Grabbing a copy of /bin/bash...Done! Writing volatilityrc to /mnt/usb/capture/localhost.localdomain-2020-02-01_08.16.55...Done! make -C //lib/modules/4.18.0-147.3.1.el8_1.x86_64/build M="/mnt/usb/volatility-master/tools/linux" clean make[1]: Entering directory '/usr/src/kernels/4.18.0-147.3.1.el8_1.x86_64' make[1]: Leaving directory '/usr/src/kernels/4.18.0-147.3.1.el8_1.x86_64' rm -f module.dwarf make -C //lib/modules/4.18.0-147.3.1.el8_1.x86_64/build CONFIG_DEBUG_INFO=y M="/mnt/usb/volatility-master/tools/linux" modules make[1]: Entering directory '/usr/src/kernels/4.18.0-147.3.1.el8_1.x86_64' CC [M] /mnt/usb/volatility-master/tools/linux/module.o Building modules, stage 2. MODPOST 1 modules WARNING: modpost: missing MODULE_LICENSE() in /mnt/usb/volatility-master/tools/linux/module.o see include/linux/module.h for more information CC /mnt/usb/volatility-master/tools/linux/module.mod.o LD [M] /mnt/usb/volatility-master/tools/linux/module.ko make[1]: Leaving directory '/usr/src/kernels/4.18.0-147.3.1.el8_1.x86_64' dwarfdump -di module.ko > module.dwarf make -C //lib/modules/4.18.0-147.3.1.el8_1.x86_64/build M="/mnt/usb/volatility-master/tools/linux" clean make[1]: Entering directory '/usr/src/kernels/4.18.0-147.3.1.el8_1.x86_64' CLEAN /mnt/usb/volatility-master/tools/linux/.tmp_versions CLEAN /mnt/usb/volatility-master/tools/linux/Module.symvers make[1]: Leaving directory '/usr/src/kernels/4.18.0-147.3.1.el8_1.x86_64' adding: module.dwarf (deflated 90%) adding: boot/System.map-4.18.0-147.3.1.el8_1.x86_64 (deflated 79%)

  1. Eseguire il plugin linux_banner per testare l'acquisizione, sfruttando il volatilityrc prototipo

[root@localhost lab]# cd /mnt/usb/capture/localhost.localdomain-2020-02-01_08.16.55 [root@localhost localhost.localdomain-2020-02-01_08.16.55]# ls localhost.localdomain-2020-02-01_08.16.55-bash localhost.localdomain-2020-02-01_08.16.55-memory.lime localhost.localdomain-2020-02-01_08.16.55-profile.zip volatilityrc [root@localhost localhost.localdomain-2020-02-01_08.16.55]# ../../volatility-master/vol.py --conf-file=volatilityrc linux_banner Volatility Foundation Volatility Framework 2.6.1 Linux version 4.18.0-147.3.1.el8_1.x86_64 ([email protected]) (gcc version 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)) #1 SMP Fri Jan 3 23:55:26 UTC 2020

  1. Usare la copia acquisita di /bin/bash per estrarre la cronologia della shell con linux_bash

[root@localhost localhost.localdomain-2020-02-01_08.16.55]# gdb localhost.localdomain-2020-02-01_08.16.55-bash GNU gdb (GDB) Red Hat Enterprise Linux 8.2-6.el8_0 Copyright (C) 2018 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-redhat-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: http://www.gnu.org/software/gdb/bugs/. Find the GDB manual and other documentation resources online at: http://www.gnu.org/software/gdb/documentation/.

For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from localhost.localdomain-2020-02-01_08.16.55-bash...Missing separate debuginfo for /mnt/usb/capture/localhost.localdomain-2020-02-01_08.16.55/localhost.localdomain-2020-02-01_08.16.55-bash Try: dnf --enablerepo='debug' install /usr/lib/debug/.build-id/b6/858d77c486b7b596f22956149bbc9f8058d98d.debug Reading symbols from .gnu_debugdata for /mnt/usb/capture/localhost.localdomain-2020-02-01_08.16.55/localhost.localdomain-2020-02-01_08.16.55-bash...(no debugging symbols found)...done. (no debugging symbols found)...done. (gdb) disass history_list Dump of assembler code for function history_list: 0x00000000000ccea0 <+0>: endbr64 0x00000000000ccea4 <+4>: mov 0x24b09d(%rip),%rax # 0x317f48 0x00000000000cceab <+11>: retq
End of assembler dump. (gdb) quit [root@localhost localhost.localdomain-2020-02-01_08.16.55]# ../../volatility-master/vol.py --conf-file=volatilityrc linux_bash -H 0x317f48 Volatility Foundation Volatility Framework 2.6.1 Pid Name Command Time Command


13822 bash 2020-01-30 20:25:39 UTC+0000 uname -a 13822 bash 2020-01-30 20:25:39 UTC+0000 ls 13822 bash 2020-01-30 20:25:39 UTC+0000 sudo -s 13822 bash 2020-01-30 20:25:39 UTC+0000 fg [... more output not shown ...]

Scarica lo strumento