
Модуль ядра для захвата энергозависимой памяти с устройств Linux и Android, создающий криминалистически достоверные дампы на диск или по сети.
Загружаемый модуль ядра (LKM) для получения энергозависимой памяти с Linux-устройств и устройств на базе Linux, таких как Android. LiME минимизирует своё взаимодействие с процессами пользовательского и ядерного пространства во время сбора данных, создавая образы памяти, которые являются более криминалистически обоснованными, чем образы других инструментов, предназначенных для сбора памяти Linux.
Подробная документация по использованию и внутреннему устройству LiME находится в каталоге «docs» проекта.
LiME использует команду insmod для загрузки модуля, передавая необходимые аргументы для его выполнения.
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.
Сбор памяти в файл:
insmod ./lime-$(uname -r).ko "path=/tmp/ram.lime format=lime"
Сбор памяти по сети:
insmod ./lime-$(uname -r).ko "path=tcp:4444 format=lime"
Затем на принимающей машине:
nc <target-ip> 4444 > ram.lime
Используйте adb для загрузки LiME и сбора памяти по сети:
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"
На хост-машине сохраните дамп памяти с помощью netcat:
nc localhost 4444 > ram.lime
Сбор на SD-карту:
insmod /sdcard/lime.ko "path=/sdcard/ram.lime format=lime"
LiME поддерживает любой алгоритм дайджеста, доступный в криптобиблиотеке ядра. Для сохранения файла дайджеста при дампе через TCP требуется 2 отдельных соединения.
nc localhost 4444 > ram.lime
nc localhost 4444 > ram.sha1
Для быстрой справки приведён список поддерживаемых дайджестов.
crc32c
md4, md5
sha1, sha224, sha256, sha384, sha512
wp512, wp384, wp256
rmd128, rmd160, rmd256, rmd320
sha3-224, sha3-256, sha3-384, sha3-512
Сжатие может значительно сократить время, необходимое для сбора образа памяти. Оно позволяет добиться ускорения до 4 раз по сравнению с несжатой передачей при минимальных накладных расходах памяти (~24 КБ).
Файл RAM будет в формате zlib, который отличается от форматов gzip или zip. Причина в том, что встроенная в ядро библиотека deflate не поддерживает эти форматы.
Для распаковки вы можете использовать pigz или любую совместимую с zlib библиотеку.
nc localhost 4444 | unpigz > ram.lime
Обратите внимание, что сжимается только файл RAM. Файл дайджеста не сжимается, и значение хеша будет соответствовать несжатым данным.
LiME был впервые представлен на Shmoocon 2012 Джо Силвом.
YouTube~ Чтение мыслей Android: сбор и анализ памяти с помощью DMD и Volatility