
Kernelmodul für die Erfassung von flüchtigem Speicher von Linux- und Android-Geräten, das forensisch einwandfreie Speicherabbilder auf die Festplatte oder über das Netzwerk erzeugt.
Ein ladbares Kernelmodul (LKM) zur Erfassung von flüchtigem Speicher von Linux- und Linux-basierten Geräten wie Android. LiME minimiert während der Erfassung die Interaktion zwischen Prozessen im Benutzer- und Kernelbereich und erzeugt Speicherabbilder, die forensisch fundierter sind als die anderer Werkzeuge, die für die Linux-Speichererfassung entwickelt wurden.
Detaillierte Dokumentation zur Verwendung und zu den internen Abläufen von LiME finden Sie im Verzeichnis „docs“ des Projekts.
LiME verwendet den Befehl insmod, um das Modul zu laden und die für seine Ausführung erforderlichen Argumente zu übergeben.
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.
Speicher in eine Datei erfassen:
insmod ./lime-$(uname -r).ko "path=/tmp/ram.lime format=lime"
Speicher über das Netzwerk erfassen:
insmod ./lime-$(uname -r).ko "path=tcp:4444 format=lime"
Dann auf dem empfangenden Rechner:
nc <target-ip> 4444 > ram.lime
Verwenden Sie adb, um LiME zu laden und Speicher über das Netzwerk zu erfassen:
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"
Erfassen Sie auf dem Host-Rechner das Speicherabbild mit netcat:
nc localhost 4444 > ram.lime
Speicher auf die SD-Karte erfassen:
insmod /sdcard/lime.ko "path=/sdcard/ram.lime format=lime"
LiME unterstützt jeden Digest-Algorithmus, der in der Krypto-Bibliothek des Kernels verfügbar ist. Um beim Auslesen über TCP eine Digest-Datei zu erstellen, sind 2 getrennte Verbindungen erforderlich.
nc localhost 4444 > ram.lime
nc localhost 4444 > ram.sha1
Als Schnellreferenz finden Sie hier eine Liste der unterstützten Digests.
crc32c
md4, md5
sha1, sha224, sha256, sha384, sha512
wp512, wp384, wp256
rmd128, rmd160, rmd256, rmd320
sha3-224, sha3-256, sha3-384, sha3-512
Durch Komprimierung lässt sich die für die Erfassung eines Speicherabbilds benötigte Zeit erheblich reduzieren. Sie kann gegenüber unkomprimierten Übertragungen eine Beschleunigung um das Vierfache bei minimalem Speicher-Overhead (~24 KB) erreichen.
Die RAM-Datei liegt im zlib-Format vor, das sich von den Formaten gzip oder zip unterscheidet. Der Grund ist, dass die in den Kernel eingebettete Deflate-Bibliothek diese nicht unterstützt.
Zum Dekomprimieren können Sie pigz oder eine beliebige zlib-kompatible Bibliothek verwenden.
nc localhost 4444 | unpigz > ram.lime
Beachten Sie, dass nur die RAM-Datei komprimiert wird. Die Digest-Datei wird nicht komprimiert, und der Hashwert entspricht den unkomprimierten Daten.
LiME wurde erstmals 2012 auf der Shmoocon von Joe Sylve vorgestellt.
Youtube~ Android-Gedankenlesen: Speichererfassung und -analyse mit DMD und Volatility