jueves, 25 de julio de 2019

LiME ~ Linux Memory Extractor

Un Módulo de Kernel Loadable (LKM) que permite la adquisición de memoria volátil de Linux y dispositivos basados en Linux, como Android. Esto hace que LiME sea único, ya que es la primera herramienta que permite capturas de memoria completa en dispositivos Android. También minimiza su interacción entre el usuario y los procesos del espacio del kernel durante la adquisición, lo que le permite producir capturas de memoria que son más sólidas de forma forense que las de otras herramientas diseñadas para la adquisición de memoria de Linux.

Tabla de contenido

  • Características
  • Uso
  • Ejemplos

Características

  • Adquisición de memoria completa de Android
  • Adquisición a través de la interfaz de red
  • Proceso mínimo de huella
  • Hash de memoria descargada

La documentación detallada sobre el uso y las funciones internas de LiME se puede encontrar en el directorio "doc" del proyecto.
LiME utiliza el comando insmod para cargar el módulo, pasando los argumentos necesarios para su ejecución.
insmod ./lime.ko "path=<outfile | tcp:<port>> format=<raw|padded|lime> [digest=<digest>] [dio=<0|1>]"
path (required): outfile ~ name of file to write to on local system (SD Card)
format (required): padded ~ pads all non-System RAM ranges with 0s
tcp:port ~ network port to communicate over
raw ~ concatenates all System RAM ranges (warning : original position of dumped memory is likely to be lost)
lime ~ each range prepended with fixed-size header containing address space info
available digest options.
digest (optional): Hash the RAM and provide a .digest file with the sum. Supports kernel version 2.6.11 and up. See below for
localhostonly (optional): 1 ~ restricts the tcp to only listen on localhost,
dio (optional): 1 ~ attempt to enable Direct IO 0 ~ default, do not attempt Direct IO 0 ~ binds on all interfaces (default)
0 ~ disable the timeout so the slow region will be acquired.
timeout (optional): 1000 ~ max amount of milliseconds tolerated to read a page (default). If a page exceeds the timeout all the memory region are skipped. This feature is only available on kernel versions >= 2.6.35.

En este ejemplo, usamos adb para cargar LiME y luego iniciarlo con la adquisición realizada a través de la red
$ adb push lime.ko /sdcard/lime.ko
$ adb forward tcp:4444 tcp:4444
# insmod /sdcard/lime.ko "path=tcp:4444 format=lime"
$ adb shell
$ su
Ahora en la máquina host, podemos establecer la conexión y adquirir memoria usando netcat.
$ nc localhost 4444 > ram.lime
Adquirir a sdcard.
# insmod /sdcard/lime.ko "path=/sdcard/ram.lime format=lime"

Compendios disponibles

Realmente, LiME admitirá cualquier algoritmo de resumen que la biblioteca del kernel pueda. La recopilación de un archivo de resumen al volcar sobre tcp requerirá 2 conexiones separadas.
$ nc localhost 4444 > ram.lime
$ nc localhost 4444 > ram.sha1
Para una referencia rápida aquí hay una lista de compendios soportados.

Todas las versiones del kernel.

crc32c
md4, md5
sha1, sha224, sha256, sha384, sha512
wp512, wp384, wp256

4.10 and up

sha3-224, sha3-256, sha3-384, sha3-512

3.0 and up


rmd128, rmd160, rmd256, rmd320
Web de la herramienta: https://github.com/
No olvides Compartir... 
Siguenos en twitter: @disoftin

No hay comentarios:

Publicar un comentario

Más leídas este mes