
Módulo de kernel para la adquisición de memoria volátil de dispositivos Linux y Android, que genera capturas forensemente sólidas en disco o a través de la red.
Un Módulo de Kernel Cargable (LKM) para la adquisición de memoria volátil desde Linux y dispositivos basados en Linux, como Android. LiME minimiza su interacción entre los procesos de espacio de usuario y de kernel durante la adquisición, produciendo capturas de memoria más sólidas a nivel forense que las de otras herramientas diseñadas para la adquisición de memoria en Linux.
La documentación detallada sobre el uso y el funcionamiento interno de LiME se puede encontrar en el directorio "docs" del proyecto.
LiME usa el comando insmod para cargar el módulo, pasando los argumentos necesarios para su ejecución.
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.
Adquisición de memoria a un archivo:
insmod ./lime-$(uname -r).ko "path=/tmp/ram.lime format=lime"
Adquisición de memoria a través de la red:
insmod ./lime-$(uname -r).ko "path=tcp:4444 format=lime"
Luego, en la máquina receptora:
nc <target-ip> 4444 > ram.lime
Use adb para cargar LiME y adquirir memoria a través de la red:
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"
En la máquina anfitriona, capture el volcado de memoria con netcat:
nc localhost 4444 > ram.lime
Adquisición en la tarjeta SD:
insmod /sdcard/lime.ko "path=/sdcard/ram.lime format=lime"
LiME admite cualquier algoritmo de resumen disponible en la biblioteca criptográfica del kernel. Recopilar un archivo de resumen al volcar a través de TCP requiere 2 conexiones separadas.
nc localhost 4444 > ram.lime
nc localhost 4444 > ram.sha1
Como referencia rápida, aquí hay una lista de los resúmenes admitidos.
crc32c
md4, md5
sha1, sha224, sha256, sha384, sha512
wp512, wp384, wp256
rmd128, rmd160, rmd256, rmd320
sha3-224, sha3-256, sha3-384, sha3-512
La compresión puede reducir significativamente el tiempo necesario para adquirir una captura de memoria. Puede lograr una aceleración de 4x en comparación con las transferencias sin comprimir con una sobrecarga de memoria mínima (~24 KB).
El archivo de RAM estará en formato zlib, que es diferente de los formatos gzip o zip. La razón es que la biblioteca deflate integrada en el kernel no los admite.
Para descomprimirlo puede usar pigz o cualquier biblioteca compatible con zlib.
nc localhost 4444 | unpigz > ram.lime
Tenga en cuenta que solo se comprime el archivo de RAM. El archivo de resumen no se comprime, y el valor hash coincidirá con los datos sin comprimir.
LiME fue presentado por primera vez en Shmoocon 2012 por Joe Sylve.
Youtube~ Lectura de la mente en Android: Adquisición y Análisis de Memoria con DMD y Volatility