Apple Seminar über Computer Forensics und e-Discovery

Apple scheint sich die große Masse der Computer Forensics Examiner und Litigation Support Spezialisten als neue Zielgruppe ausgeschaut zu haben. Gerade im Bereich Litigation Support gibt es ja bekanntlich viel Geld zu verdienen und man kann gar nicht genug Hardware nachschieben, wie man eigentlich müsste. Apple bietet nun für diese Zielgruppe ein kostenfreies Online Seminar zum Thema “Mac for Computer Forensics & e-discovery” an.

Weiterlesen…

README zur Benutzung des Linux Incident Response Toolkits V1.18

README zur Benutzung des Linux Live Response Toolkits
======================================================

Das Linux Live 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.

Das Ziel des Toolkits ist:
(a) Konzentration auf die rein volatilen Daten (Speicher)
(b) Möglichst wenig Veraenderungen an den Festplattendaten.

Diese Vorgehensweise ergibt nur dann einen Sinn, wenn die Festplattendaten
nach der Aufnahme einer Offline-Analyse zur Verfuegung stehen, d.h. wenn
die Platte nach einem harten Abschalten roh ausgelesen werden kann.

Generelle Verfahrensweise:
    – Mounten des Read-Only-Mediums mit dem LLR (CD,DVD, oder USB-Stick)
      Dies kann nur mit Bordmitteln des kompromittierten Systems geschehen.

      => Gewnügend Speicherplatz auf dem Aufnahmemedium oder Remote-Rechner
      bereithalten – Faustregel: 3 x Arbeitsspeicher

      => Richtiges Filesystem verwenden: FAT32 (USB-Sticks) kann nur Files bis
      4GB. Für externe Datentraeger eignet sich am besten ext2/ext3, das
      problemlos auch unter Windows lesbar ist.

    – Starten der gesicherten Umgebung (“start-2.6.sh” oder “start-2.4.sh”,
      je nach Linux-Kernel-Version) als “root”. Das Script startet die
      mitgelieferte statisch gelinkte Shell (BASH) mit einem gesaeubertem
      “Environment” und ohne das versehentlich Dateien des Systems gelesen
      oder geschrieben werden (z.B. “.profile”, “.bashrc”, “/etc/profile”,
      “~/.bash_history” usw.).

    – Aufnahme der Daten mit Hilfe des Scripts “llr.sh”
      Die Daten sollten moeglichst ueber Netz (TCP) auf einen anderen Rechner
      geschrieben werden, um keine schreibbaren Datentraeger einhaengen zu
      muessen und moeglichst wenig im Speicher zu aendern.

      Die Daten koennen 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).

    – Erzeugen der Checksumme (sha256sum) nicht vergessen, wenn das Log auf
      einem Remote-Rechner liegt.

WARNUNG
========
Gerade das Auslesen des Kernel- und Prozess-Speichers ist ein Prozess, der
nicht immer einfach funktioniert und das System in seltenen Faellen zum
Absturz bringen kann. Wenn moeglich, sollte das Script an einem gleichartigen
System vorher getestet werden.

Bei dem Auslesen des Prozess-Speichers kommen zwangslaeufig viele Fehler-
meldungen zusammen, da prinzipiell nicht auf alle Daten zugegriffen werden
kann (s.u.).

– Kernel-Speicher (/dev/mem)
  Unter Linux 2.6 wird es im allgemeinen nur moeglich sein, das 1. Megabyte
  an physischem Speicher auszulesen (wenn ueberhaupt). Insbesondere bei
  XEN-Kernel sollte mit Vorsicht gearbeitet werden – dort ist es bei Tests
  in einigen Faellen zum Systemabsturz gekommen. Hier empfiehlt sich die
  Option “kmemlast”, der den Dump des Kernel-Speichers an das Ende verlegt.
  Leider werden zu diesem Zeitpunkt bereits viele urspruengliche Daten
  verloren sein.

– Prozess-Speicher
  Das Script benutzt fuer die Ausgabe des Prozess-Speichers standardmaessig den
  “Process Dumper” von Tobias Klein
  (http://www.trapkit.de/research/forensic/pd/).
  Wahlweise kann auch das Tool “pcat” aus dem Coroners Toolkit TCT
  (http://www.porcupine.org/forensics/tct.html) genutzt werden.

  Unabhaengig vom Tool ist das Auslesen des Prozess-Speichers eine langwierige
  Angelegenheit, bei der verschiedene Fehler auftreten koennen (und werden):
  – Prozesse, die bereits mit PTRACE getraced werden, koennen nicht ausgelesen
    werden.
  – Systemprozesse, die komplett im Kernel laufen, können nicht ausgelesen
    werden.
  – Diese beiden Punkte fuehren zu einer hohen Anzahl von Fehlermeldungen
    beim Ausfuehren des Scripts – das ist normal.
  – Wenn kein Zugriff ueber /proc/pid/mem verfuegbar ist, werden die Prozesse
    mittels PTRACE angehalten – dies kann bei X-Servern in seltenen Faellen zum
    Absturz fuehren.

  Der “Process Dumper” 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 (URL siehe oben).
Was wird auf dem Zielsystem geaendert?
=======================================
Jede Untersuchung hinterlaesst eigene Spuren,

Vom Linux Live Response Script werden nur die minimal noetigen Dateien auf dem
zu untersuchenden Host-System angefasst. Das Script liest oder schreibt in
keine weiteren Dateien (virtuell oder echt) auf dem Zielsystem (nicht einmal
/dev/null).

Benoetigte “Dateien” (hauptsaechlich das /proc-Filesystem):

/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
/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.

Gelesene “echte” Dateien:

/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:
==============
    llr.sh          Live-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
                    ca. 1-3 x (RAM-Groesse) des zu untersuchenden Rechners.

                    Aufruf (wenn bereits die statische Bash von der CD
                    laeuft):
                        ./llr.sh (host) (port)
                        ./llr.sh (ausgabedatei)

                    Aufruf (wenn die Host-Shell laeuft):
                        bin-x86-2.6/bash ./llr.sh (host) (port)
                        bin-x86-2.6/bash ./llr.sh (ausgabedatei)

                    Fuer die Ausgabe auf einem externen Host sollte auf diesem
                    ein Netcat gestartet werden:
                        nc -l [-p] (port) > (ausgabedatei)
                    oder
                        nc -l [-p] (port) | tee (ausgabedatei)

                    Nach der Ausfuehrung des Befehls sollte unbedingt SOFORT
                    eine Checksumme erstellt werden:
                        sha256sum (ausgabedatei) > (ausgabedatei).sha256sum
                   
                    Bei der Speicherung in einer Datei wird diese Checksumme
                    automatisch erzeugt.

    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 llr-extract.pl wird der lesbare HTML-Report erzeugt.
    llr-extract.pl  und die Memory Dumps werden als Datei herausgeschrieben.
                   
                    Aufruf:
                        …/extract.pl (logdatei)

                    Aus den Logdaten wird ein HTML-Report unter dem Namen
                    (logdatei).html erzeugt. Alle im Log enthaltenen Dateien
                    (Memory Dumps) werden im Verzeichnis (logdatei).d abgelegt
                    und sind im HTML-Report verlinkt.                   

                    Das Script ueberschreibt keine Dateien, sondern bricht ab,
                    falls Dateien gleichen Namens bereits vorliegen.

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 zu untersuchenden Rechner:
1. CD-ROM-Mounten
   Dies geht nur mit dem Systembefehlen des zu untersuchenden Systems bzw.
   per Automount.
>  # mount -r -n /dev/xxx /mnt/cdrom

2. Starten der statischen Shell:
>  # cd /..<pfad zum cdrom>../llr
>  # ./start-2.6.sh
   == BASH: /mnt/cdrom/llr/bin-x86-2.6/bash
   == HOME: /mnt/cdrom/llr/
   == PATH: /mnt/cdrom/llr/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.

3. Starten des Scripts
>  bin-x86-2.6/bash ~ # ./llr.sh 10.2.2.2 3333
   === Start of llr.sh Version 0.4 $Revision: 1.18 $

   Available options:
     checksum  Checksum every external command with ‘sha256sum -b’ (which is
               also external) before running it.
     date      Run ‘date’ before every command to log exact start times. If
               not set, only start and end times of the script will be logged.
     kmem      Dump kernel memory from /dev/kmem (may not work, may only dump
               the first Mbyte, may in rare cases hang the system)
     kmemlast  The kernel memory dump may hang in rare cases, until now only
               seen on XEN kernels. With this option, it is executed last. Use
               with XEN kernels.
     procmem   Dump process memory. Takes a long time. May hang in rare cases
               if executed under X11.
     pcat      Use pcat (from The Coroners Toolkit) instead of pd (process
               dumper from trapkit.de)
  
   Current options: >checksum date procmem kmem<
  
>  Enter option to toggle or press enter to continue>
  
4. Optionen waehlen
   Optionen koennen an- und abgewaehlt werden, indem ihr Name eingegeben wird.
   Abschliessen mit <Enter>

   === Start of llr.sh Version 0.4 $Revision: 1.18 $
   ===       CMD: ./llr.sh 10.2.2.2 3333
   ===      BASH: /mnt/cdrom/llr/bin-x86-2.6/bash
   ===      PATH: /mnt/cdrom/llr/bin-x86-2.6
   === SCRIPTDIR: ./
   ===   OPTIONS: checksum date procmem kmem
   ===    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 [-p] 3333 | tee logfile.out
   Press Enter to start>

Auf dem Logrechner:
4. Starten des Netcat-Kommandos:
>  $ nc -l 3333 > logfile.out
  
   Hinweis: Es gibt zwei Versionen des Netcat-Kommands, eine benoetigt fuer
   den Port die Option “-p”, die andere kennt diese Option nicht.
   Vorher ausprobieren!

5. Nach erfolgreichem Lauf: Checksumme erzeugen!
>  $ sha256sum logfile.out > logfile.out.sha256sum

6. Mit dem Perl-Script “tools/llr-extract.pl” wird dann ein HTML-Report aus
   dem Log erzeugt.
>  $ …/extract.pl logfile.out
 
   Alle Memory Dumps und Binaerdateien werden herausgeschrieben und sind
   im HTML-Report verlinkt.
Hinweis zur Auswertung
=======================

Die HTML-Ausgabe ist relativ einfach und funktioniert zumindest mit Firefox,
Mozilla und Safari, im Internet-Explorer nur mit Abstrichen in der Navigation.

Das Script benutzt fuer die Ausgabe des Prozess-Speichers standardmaessig den
“Process Dumper” von Tobias Klein (http://www.trapkit.de/research/forensic/pd/).
Wahlweise kann auch das Tool “pcat” aus dem Coroners Toolkit TCT
(http://www.porcupine.org/forensics/tct.html) genutzt werden.

Updates
========
http://computer-forensik.org/tools/ix
http://ewers.net/llr

Enno Ewers  2008/08

Forensik DVD aus iX special 10/2008

Die Multiboot-DVD enthält fünf Linux-basierte Systeme zum Testen und/oder Lernen: Avira Rescue, Backtrack 3, DAVIX, Damn Vulnerable Linux, Recovery Is Possible. Die wichtigsten Boot-Parameter sehen Sie nach dem Neustart des Rechners mit eingelegter DVD, weitere sind in der Konfigurationsdatei isolinux/isolinux.cfg zu finden.

  • Inhaltsverzeichnis des Forensik-/ Incident Response-Teils der DVD mit Erläuterung der einzelnen Funktionen

 

 

  • angepasste Konfigurationsdatei für Windows Forensic Toolchest (WFT)
  • Readme für Windows Forensic Toolchest (WFT)