
Modulo del kernel per l'acquisizione della memoria volatile da dispositivi Linux e Android, che produce acquisizioni valide ai fini forensi su disco o tramite rete.
Un modulo kernel caricabile (LKM - Loadable Kernel Module) per l'acquisizione di memoria volatile da dispositivi Linux e basati su Linux, come Android. LiME minimizza l'interazione tra i processi dello spazio utente e dello spazio kernel durante l'acquisizione, producendo catture di memoria più valide dal punto di vista forense rispetto a quelle di altri strumenti progettati per l'acquisizione di memoria su Linux.
La documentazione dettagliata sull'utilizzo e sul funzionamento interno di LiME si trova nella directory "docs" del progetto.
LiME usa il comando insmod per caricare il modulo, passando gli argomenti richiesti per la sua esecuzione.
insmod ./lime-$(uname -r).ko "path=<outfile | tcp:<port>>
format=<raw|padded|lime>
[digest=<digest>]
[dio=<0|1>]
[compress=<0|1>]
[localhostonly=<0|1>]
[timeout=<ms>]"
path (required):
outfile ~ name of file to write to on local system
tcp:port ~ network port to communicate over
format (required):
padded ~ pads all non-System RAM ranges with 0s,
starting from physical address 0
lime ~ each range prepended with fixed-size header
containing address space info
raw ~ concatenates all System RAM ranges
(warning: original position of dumped memory
is likely to be lost therefore making analysis
in most forensics tools impossible. This format
is not recommended except for advanced users)
digest (optional):
Hash the RAM and provide a sidecar file with the sum.
The sidecar filename is the output path with the
digest algorithm appended (e.g., ram.lime.sha256).
Supports kernel version 2.6.11 and up. See below for
available digest options.
Note: enabling digest increases code complexity during
acquisition and will overwrite additional memory. Only
use when integrity verification is required.
compress (optional):
1 ~ compress output with zlib
0 ~ do not compress (default)
Only available when CONFIG_ZLIB_DEFLATE is enabled
in the kernel.
Note: enabling compression allocates additional kernel
memory (~24 KB) and increases code complexity during
acquisition, disturbing more of the target system's
memory. Only use when the speed or size benefit is
required.
dio (optional):
1 ~ attempt to enable Direct IO
0 ~ do not attempt Direct IO (default)
localhostonly (optional):
1 ~ restricts tcp to only listen on localhost
0 ~ binds on all interfaces (default)
timeout (optional):
1000 ~ max milliseconds tolerated to read/write a
page (default, 1 second). If a page exceeds the timeout,
the rest of that memory range is skipped.
0 ~ disable the timeout so the slow region will
be acquired.
This feature is only available on kernels >= 2.6.35.
Acquisizione della memoria su un file:
insmod ./lime-$(uname -r).ko "path=/tmp/ram.lime format=lime"
Acquisizione della memoria tramite rete:
insmod ./lime-$(uname -r).ko "path=tcp:4444 format=lime"
Quindi sulla macchina ricevente:
nc <target-ip> 4444 > ram.lime
Usa adb per caricare LiME e acquisire memoria tramite rete:
adb push lime.ko /sdcard/lime.ko
adb forward tcp:4444 tcp:4444
adb shell
su
insmod /sdcard/lime.ko "path=tcp:4444 format=lime"
Sulla macchina host, cattura il dump della memoria usando netcat:
nc localhost 4444 > ram.lime
Acquisizione sulla scheda SD:
insmod /sdcard/lime.ko "path=/sdcard/ram.lime format=lime"
LiME supporta qualsiasi algoritmo digest disponibile nella libreria crittografica del kernel. La raccolta di un file digest durante il dump tramite TCP richiede 2 connessioni separate.
nc localhost 4444 > ram.lime
nc localhost 4444 > ram.sha1
Per un rapido riferimento, ecco un elenco dei digest supportati.
crc32c
md4, md5
sha1, sha224, sha256, sha384, sha512
wp512, wp384, wp256
rmd128, rmd160, rmd256, rmd320
sha3-224, sha3-256, sha3-384, sha3-512
La compressione può ridurre significativamente il tempo necessario per acquisire una cattura di memoria. Può raggiungere una velocità 4 volte superiore rispetto ai trasferimenti non compressi con un overhead di memoria minimo (~24 KB).
Il file della RAM sarà nel formato zlib, che è diverso dai formati gzip o zip. Il motivo è che la libreria deflate integrata nel kernel non li supporta.
Per decomprimerlo puoi usare pigz o qualsiasi libreria compatibile con zlib.
nc localhost 4444 | unpigz > ram.lime
Nota che solo il file della RAM viene compresso. Il file digest non è compresso e il valore hash corrisponderà ai dati non compressi.
LiME è stato presentato per la prima volta allo Shmoocon 2012 da Joe Sylve.
Youtube~ Android Mind Reading: acquisizione e analisi della memoria con DMD e Volatility