
Module noyau pour l'acquisition de mémoire volatile sur des appareils Linux et Android, produisant des captures fiables sur le plan forensique, vers le disque ou via le réseau.
Un module du noyau chargeable (LKM) pour l'acquisition de mémoire volatile sur Linux et les appareils basés sur Linux, tels que Android. LiME minimise son interaction avec les processus des espaces utilisateur et noyau pendant l'acquisition, produisant des captures mémoire plus fiables sur le plan forensique que celles des autres outils conçus pour l'acquisition de mémoire Linux.
Une documentation détaillée sur l'utilisation de LiME et son fonctionnement interne peut être trouvée dans le répertoire "docs" du projet.
LiME utilise la commande insmod pour charger le module, en passant les arguments requis pour son exécution.
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.
Acquisition de la mémoire vers un fichier :
insmod ./lime-$(uname -r).ko "path=/tmp/ram.lime format=lime"
Acquisition de la mémoire via le réseau :
insmod ./lime-$(uname -r).ko "path=tcp:4444 format=lime"
Puis sur la machine réceptrice :
nc <target-ip> 4444 > ram.lime
Utilisez adb pour charger LiME et acquérir la mémoire via le réseau :
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"
Sur la machine hôte, capturez la mémoire à l'aide de netcat :
nc localhost 4444 > ram.lime
Acquisition vers la carte SD :
insmod /sdcard/lime.ko "path=/sdcard/ram.lime format=lime"
LiME prend en charge tout algorithme de condensat disponible dans la bibliothèque cryptographique du noyau. La collecte d'un fichier de condensat lors d'un dump via TCP nécessite 2 connexions distinctes.
nc localhost 4444 > ram.lime
nc localhost 4444 > ram.sha1
Pour référence rapide, voici une liste des condensats pris en charge.
crc32c
md4, md5
sha1, sha224, sha256, sha384, sha512
wp512, wp384, wp256
rmd128, rmd160, rmd256, rmd320
sha3-224, sha3-256, sha3-384, sha3-512
La compression peut réduire considérablement le temps nécessaire à l'acquisition d'une capture mémoire. Elle peut atteindre une accélération de 4x par rapport aux transferts non compressés, avec une surcharge mémoire minimale (~24 Ko).
Le fichier RAM sera au format zlib, qui est différent des formats gzip ou zip. La raison est que la bibliothèque deflate intégrée au noyau ne les prend pas en charge.
Pour le décompresser, vous pouvez utiliser pigz ou toute bibliothèque compatible zlib.
nc localhost 4444 | unpigz > ram.lime
Notez que seul le fichier RAM est compressé. Le fichier de condensat n'est pas compressé et la valeur de hachage correspondra aux données non compressées.
LiME a été présenté pour la première fois au Shmoocon 2012 par Joe Sylve.
Youtube~ Lecture d'esprit Android : Acquisition et analyse de mémoire avec DMD et Volatility