====================================================
Das Incident Response Toolkit ist zur Sicherstellung der volatilen
Daten eines eingeschalteten Linux-Rechners mit x86-Prozessor unter den
Kernel-Versionen 2.4 und 2.6 gedacht.
Generelle Verfahrensweise:
– Aufnahme der Daten mit Hilfe des Scripts “ir-linux.sh”
Die Daten sollten moeglichst ueber Netz (TCP) auf einen anderen Rechner
geschrieben werden, um moeglichst wenig im Speicher zu aendern.
Notfalls koennen die Daten auch in einer Datei auf einem in das
Filesystem eingehaengten externen Datentraeger (USB-Stick) geschrieben
werden.
– Notfalls koennen haendische Untersuchungen mit Hilfe der statisch
gelinkten Shells und den mitgelieferten Binaries ausgefuehrt werden.
– Nach Aufnahme der Daten sollte der Rechner hart abgeschaltet werden
(Netzstecker ziehen!).
Keinesfalls sollte er per “shutdown” heruntergefahren werden – eventuell
loest der “Power”-Knopf einen geregelten Shutdown aus.
Danach kann dann ein Abzug der Festplatte “offline” erstellt werden
(d.h. durch Ausbau und Lesen durch ein Dritt-System ueber eine
Schreibsperre bzw. notfalls online durch Booten von einem externen
Medium).
WARNUNG
========
Vom Incident Response Script werden nur die minimal noetigen Dateien auf dem
zu untersuchenden Host-System angefasst.
Benoetigte Dateien (nur /dev/null und das /proc-Filesystem):
/dev/null /dev/null _muss_ existieren. Das Script schreibt auf
dieses Device. Leider gibt es keinen portablen Weg,
/dev/null auf der CD-ROM zu integrieren.
Auf Linux hat /dev/null normalerweise Major 1, Minor 3.
$ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Dec 12 17:21 /dev/null
Um ein /dev/null zu erstellen:
# mknod /dev/null c 1 3
# chmod 555 /dev/null
(Das Script prueft auf das Vorhandensein von /dev/null)
/proc Ohne das /proc-Filesystem koennen praktisch keine
relevanten Daten aufgenommen werden.
Sollte das /proc-Filesystem nicht eingehaengt sein, kann
es mit folgendem Befehl gemountet werden:
# mount -n -t proc none /proc
Gelesene Dateien:
/dev/mem Diese Device bietet Zugriff auf den physischen Speicher
des Systems. Wenn es nicht existiert, fehlt der Speicher-
auszug (unkritisch). Auf einigen 2.6-Systemen kann sowieso
nur das erste Megabyte des Speicher gelesen werden.
Speicherdumps der einzelnen Prozesse sind trotzdem
moeglich.
/etc/passwd Diese Dateien werden fuer die User-Zuordnung und die
/var/run/utmp Liste der letzten Logins sowie gerade angemeldeten
/var/log/wtmp Benutzer benoetigt.
Bestandteile:
==============
ir-linux.sh Incident-Response-Script zur Aufnahme volatiler Daten
auf dem Zielrechner vor dem Abschalten.
Nimmt die volatilen Daten auf dem System auf und schreibt
die Ergebnisse ueber TCP an den angegebenen Host oder in
eine lokale Ausgabedatei. Die Ausgabedatei sollte
unbedingt auf einem externen Medium mit genuegend
Speicherplatz liegen. Der Speicherbedarf liegt bei
bis zu 2 x (RAM-Groesse) des zu untersuchenden Rechners.
Aufruf (wenn bereits die statische Bash von der CD
laeuft):
./ir-linux.sh <host> <port>
./ir-linux.sh <ausgabedatei>
Aufruf (wenn die Host-Shell laeuft):
bin-x86-2.6/bash ./ir-linux.sh <host> <port>
bin-x86-2.6/bash ./ir-linux.sh <ausgabedatei>
Fuer die Ausgabe auf einem externen Host sollte auf diesem
ein Netcat gestartet werden:
nc -l <port> > <ausgabedatei>
oder
nc -l <port> | tee <ausgabedatei>
start-2.4.sh Startet interaktive “bash” mit dem Pfad
start-2.6.sh “./bin-x86-2.X/bash”. Ignoriert Startup-Dateien
.bashinit (/etc/profile, ~/.bashrc usw.) und vermeidet das Schreiben
der Bash-History in das Home-Directory.
bin-x86-2.4/ Verzeichnis mit statischen Binaries fuer Linux-Systeme
mit 2.4.x-Kernel auf x86-Plattformen.
Die Binaries laufen groesstenteils auch mit hoeheren
Kernel-Versionen.
bin-x86-2.6/ Verzeichnis mit statischen Binaries fuer Linux-Systeme
mit 2.6.x-Kernel auf x86-Plattformen.
tools/ Mit extract.pl koennen die im UUENCODE-Format geschriebenen
extract.pl Speicherdumps aus dem Logfile extrahiert werden.
Aufruf:
…/extract.pl <logdatei>
Alle enthaltenen Dateien werden in das lokale Verzeichnis
geschrieben. Das Script ueberschreibt keine Dateien,
sondern bricht ab, falls Dateien gleichen Namens bereits
vorliegen.
Eine von den UUencode-Daten befreite Logdatei wird mit dem
Namen “<logdatei>.stripped.txt” abgelegt.
Beispiel
===========
Beispiel fuer einen Rechner mit Linux 2.6-Kernel, bei dem die Daten auf
den Logrechner mit der IP 10.2.2.2 auf Port 3333 geschrieben werden sollen.
Auf dem Logrechner:
1. Starten von Netcat zum Loggen in eine Datei:
> $ nc -l 3333 > /…/Ausgabe-Host1.log
Auf dem zu untersuchenden Rechner:
2. CD-ROM-Mounten
Dies geht nur mit dem Systembefehlen des zu untersuchenden Systems bzw.
per Automount.
> # mount -r -n /dev/xxx /mnt/cdrom
3. Starten der statischen Shell:
> # cd /..<pfad zum cdrom>../Linux/IR
> # ./start-2.6.sh
== BASH: /mnt/cdrom/IR/Linux/bin-x86-2.6/bash
== HOME: /mnt/cdrom/IR/Linux/
== PATH: /mnt/cdrom/IR/Linux/bin-x86-2.6
bin-x86-2.6/bash ~ # _
Nun steht eine statisch gelinkte Bash zur Verfuegung, die nur Binaries
aus dem entsprechenden Pfad auf der CD benutzt. Ab jetzt werden keine
Dateien auf dem zu untersuchenden System benutzt.
4. Starten des Scripts
> bin-x86-2.6/bash ~ # ./ir-linux.sh 10.2.2.2 3333
=== Start of ir-linux.sh $Revision: 1.4 $ ===
=== CMD: ./ir-linux.sh 10.2.2.2 3333
=== BASH: /mnt/cdrom/IR/Linux/bin-x86-2.6/bash
=== PATH: /mnt/cdrom/IR/Linux/bin-x86-2.6
=== OUTPUT: remote /dev/tcp/10.2.2.2/3333
Start TCP listener on target host 10.2.2.2 port 3333:
e.g.: # nc -l 3333 | tee logfile.out
> Press Enter to start>
Auf dem Logrechner:
5. Das Logfile ist meistens sehr lang, da Speicherinhalte im UUENCODE-Format
im Log enthalten sind. Mit dem Script “tools/extract.pl” koennen die
Dateien aus dem Log extrahiert werden. Dabei wird auch eine komprimierte
Version des Logfile ohne die Dateiinhalte herausgeschrieben.
> $ …/extract.pl Ausgabe-Host1.log
Hinweis zur Auswertung
=======================
Das Script benutzt fuer die Ausgabe des Prozess-Speichers den “Process Dumper”
von Tobias Klein (http://www.trapkit.de/research/forensic/pd/). Dieses Tool
hat gegenueber “pcat” den Vorteil, das es die Meta-Daten zum Prozess in einem
maschinenlesbaren Format mit abspeichert und so eine einfache Auswertung
erlaubt.
Die Auswertung des Prozessspeichers kann allerdings nur mit dem
Windows-basierten “Memory Parser (MMP)” vom selben Autor erfolgen. Dieses Tool
ist ebenfalls auf der CD enthalten.
Enno Ewers <ewersAThisolutionsDOTcom> 2007/05