Disk-Forensik/ Sicherstellung/ Imaging

Aus Wikibooks

Allgemeines[Bearbeiten]

Ist die Beschlagnahme von Datenträgern nicht möglich, oder wurden die Datenträger bereits beschlagnahmt, müssen zur Analyse exakte Kopien erstellt werden. Beim Imaging wird der Originaldatenträger Sektor für Sektor eingelesen und auf einen anderen Datenträger (bzw. meist in eine Image-Datei auf einem anderen Datenträger) geschrieben. Imaging ist wichtig, da die Originaldatenträger nicht verändert werden dürfen, und eine genaue Analyse daher auf dem Originaldatenträger nicht möglich ist. Die Analyse auf einem Duplikat hat aber auch wesentliche Vorteile:

  • Die Untersuchung kann in einer geschützten, ruhigen Umgebung erfolgen (z.B. nicht im Serverraum).
  • Am Untersuchungsort stehen unter Umständen nicht alle notwendigen Tools zur Verfügung.
  • Die Analyse kann unter Umständen einen längeren Zeitraum dauern.

Es gibt 3 wichtige Grundsätze beim Erstellen von Images:

  • Sicherstellen, dass keine Änderungen am Originaldatenträger durchgeführt werden.
  • Sicherstellen, dass die gesamte Festplatte (alle Sektoren) kopiert wurden.
  • Sicherstellen, dass Kopie und Original den identischen Inhalt enthalten.

Die Verhinderung von Änderungen am Originaldatenträger kann am sichersten und einfachsten mit einem Writeblocker durchgeführt werden. Mit Writeblocker wird ein Schreiben auf dem Originaldatenträger sicher verhindert. Steht kein Writeblocker zur Verfügung, muss die Veränderung des Originaldatenträgers durch entsprechend vorsichtige Vorgehensweise sichergestellt werden. Die Sicherstellung, dass die gesamte Festplatte kopiert wurde, wird durch die Verwendung von anerkannten und erprobten Methoden und Werkzeugen gewährleistet. Die Sicherstellung, dass Kopie und Original identisch sind, kann durch die Verwendung von Hashes gewährleistet werden. In den weiteren Punkten dieses Kapitels werden Methoden und Tools vorgestellt, um diese Punkte zu gewährleisten.

Das Imaging kann ein sehr zeitaufwändiger Prozess sein. Für 10 GB können teils bis zu 45 Minuten gebraucht werden. Mit der entsprechenden Hardware ist dies jedoch auch in ca 4,5 Minuten erledigt. Bei großen Datenmengen ist daher die Wahl der Hardwarewerkzeuge entscheidend.

Verwendung eines Schreibblockers[Bearbeiten]

Um die zu analysierende Festplatte vor ungewollten Schreibzugriffen zu bewahren, ist es möglich diese mit einem Schreibblocker zu schützen. Dabei kann man in Software- und Hardware-Blocker unterscheiden. Hardware-Schreibblocker sind dabei vorzuziehen, da sie näher bei der Festplatte operieren, Flüchtigkeitsfehler unterbinden und daher sicherer sind.

Hardware-Schreibblocker[Bearbeiten]

Bei einem Hardware-Schreibblocker handelt es sich um ein spezielles Gerät, welches zwischen dem kopierenden Gerät/Computer und der zu kopierenden Festplatte installiert wird. Dieser fängt alle Befehle an die Festplatte ab und entscheidet, ob es sich um einen schreibenden oder einen lesenden Zugriff handelt. Lesende Zugriffe werden an die Festplatte weitergegeben, während schreibende Zugriffe unterbunden werden. Writeblocker sind von verschiedenen Herstellern für unterschiedliche Schnittstellen wie IDE, SATA, SCSI, Firewire und USB erhältlich.

Software-Schreibblocker[Bearbeiten]

Der Zugriff auf die Festplatte eines Computer kann entweder direkt oder über das BIOS durchgeführt werden. Der Zugriff über das BIOS ist einfacher, da sich das BIOS weitgehend um die Verwaltung der Festplatte kümmert. Dazu wird der sogenannte INT13h, d.h. der Interrupt 13 verwendet. Alle Interrupts werden in der Interrupt-Tabelle aufgezeichnet und zu jedem Interrupt eine Sprungadresse zu einem bestimmten Code gespeichert. Ein Software-Schreibblocker verändert die Interrupt-Tabelle und ersetzt den Code durch einen eigenen, welcher alle Schreibzugriffe unterbindet. Dies ist jedoch unzuverlässig, da der direkte Zugriff auf die Festplatte noch immer möglich ist (Die meisten aktuellen Betriebssysteme z.B. Linux greifen direkt auf die Festplatte zu. Aus diesem Grund sind bei diesen Betriebssystemen Software-Schreibblocker nicht möglich).

Entfernen von HPA (Host Protected Area) und DCO (Device Configuration Overlay)[Bearbeiten]

Ein HPA kann z.b. mit dem Tool diskstat des Sleuth Kit gefunden werden und mit dem Tool disk_sreset kann der HPA danach entfernt werden. Da das Löschen eines HPA eine Schreiboperation auf den Datenträger darstellt, besteht die Gefahr, damit Daten zu vernichten. Daher sollte vor dem Entfernen des HPA, d.h. dem Sichtbarmachen des HPA-Bereichs ein vollständiges Image des sichtbaren Bereichs der Festplatte erstellt und danach der HPA entfernt werden.

Ein DCO kann z.b. mit dem Image MASSter Solo 2 von ICS (http://www.icsforensic.com) aufgespürt und kopiert werden.

Beide versteckten Bereiche (HPA und DCO) können mit den Schreibblockern von Tableau (http://www.Tableau.com) und auch mit dem TreCorder (http://www.TreCorder.de) einfach entfernt und geimaged werden.

Weitere Geräte welche HPA und DCO Bereiche imagen können sind das TALON, Forensic-Quest und das DOSSIER (http://www.logicube.com)

Hashes[Bearbeiten]

Kryptographische Hashes sind komplexe Funktionen, die aus einer großen Datenmenge einen eindeutigen String erzeugen, welcher zwischen 128 und 512 Bit lang ist. Aufgrund der Kürze eines Hashes gibt es viele Daten, die den gleichen Hash ergeben. Dies wird als Kollision bezeichnet. Es ist jedoch sehr schwer, zwei verschiedene Datenmengen zu finden, welche den gleichen Hash haben. Die Verwendung von Hashes ermöglicht es, zwei verschiedene Datenmengen schnell auf Unterschiede zu überprüfen. Da jedoch nur festgestellt werden kann, ob sich die beiden Datenmengen unterscheiden, jedoch nicht an welcher Stelle und wie oft, ist es vorteilhafter, einen Hash nicht von einer ganzen Festplatte zu erzeugen, sondern z.B. von jedem GB. Diese Vorgehensweise hat den Vorteil, dass bei einem aufgetretenen Fehler nicht die ganze Festplatte neu kopiert werden muss, sondern nur der entsprechende Bereich. Weiter sollte der Hash bereits vor dem Kopiervorgang generiert werden, da dadurch auch bewiesen werden kann, dass während des Kopierens der Festplatte keine Daten verändert wurden.

Speicherung von Images[Bearbeiten]

Die kopierten Datenträger können in unterschiedlicher Weise gespeichert werden. In jedem Fall wird empfohlen den Zieldatenträger, falls möglich, sicher zu löschen ("wipen" d.h. mit Nullen überschreiben). Bei großen Images kann es unter Umständen Sinn machen, diese in einer komprimierten Form abzuspeichern. Dabei ist zu beachten, dass die Komprimierung je nach Art der Daten auf dem Originaldatenträger nur geringe bis gar keinen Platzgewinn bringt. Weiter dauern sowohl das Erzeugen des Image als auch die Analyse des Image länger, da neben dem Kopieren und Analysieren zusätzlich auch noch das Image gepackt bzw. entpackt werden muss. Zur Lagerung der Fall-Images kann dies sinvoll sein.

Unterschiedliche Datenträger:

  • direkt auf einer einer anderen Festplatte
  • in einer Image-Datei
  • auf (optischen) Datenträgern (in diesem Fall muss das Image in der Regel auf mehrere Datenträger aufgeteilt werden)

Unterschiedliche Datenformate (Metadaten können dabei z.B. Hashes oder andere Informationen enthalten):

  • Raw Image
  • Embedded image (Metadaten und Raw Image sind in einer Datei abwechselnd zusammengefasst)
  • Raw Image und externe Metadaten

Kopieren des Datenträgers über das Netzwerk[Bearbeiten]

Möchte man das Image über das Netzwerk auf einen anderen Computer kopieren, bietet sich das Tool netcat (http://netcat.sourceforge.net/) an.

# Festplatte löschen, mounten, Hashes erstellen usw. siehe nächstes Kapitel
# Startet einen Netzwerkserver auf dem Zielgerät. Das Image wird dabei in die Datei disk.dd geschrieben.
> nc –l –p 7000 > disk.dd
# Sendet den Inhalt der Festplatte über das Netzwerk an das Zielgerät
> dd if=/dev/hda bs=2k | nc –w 3 10.0.0.1 7000

Imaging mit dd[Bearbeiten]

dd ist ein Standard-Linux/Unix-Tool, welches zum Kopieren von Daten verwendet werden kann. dd ist auch für Windows verfügbar (entweder eine Version von George Garner unter http://users.erols.com/gmgarner/forensics/ oder als UnixUtils unter http://unxutils.sourceforge.net). Die Version von Garner kann auch während des Kopierens automatisch MD5-Hashes erstellen.


Aus der Man-Page von dd:

dd copies a file (from standard input to standard output, by default) with a changeable I/O block size,
while optionally performing conversions on it.
# hda = Origianldatenträger; hdc = Ziel des Image
# Vor dem Kopieren sollte sichergestellt werden, dass das Zielmedium wirklich leer ist. Danach wird es formatiert und gemountet.
> dd if=/dev/zero of=/dev/hdc
> mkfs.ext3 /dev/hdc
> mount /dev/hdc /mnt
# Erstellen eines Hashes der alten Festplatte (alternativ oder zusätzlich zu md5 kann auch
# sha1 mit dem Befehl sha1sum verwendet werden
> md5sum /dev/hda
# Die Festplatte in eine Datei auf einer anderen Festplatte kopieren. Erklärung der Parameter bs und conv findet sich unter dd_rescue
# Es werden die Anzahl an Blocks ausgegeben, die kopiert wurden. Der Wert +1 bezieht sich dabei auf den letzten Block,
# welcher nicht vollständig war. Würde dort ein +0 stehen, war das letzte Byte der Quelle zugleich auch das Ende eines Blocks.
> dd if=/dev/hda of=/mnt/image-hda-20061218 bs=8192 conv=noerror,sync
636+1 records in
636+1 records out
# Berechnung des Hashes des Images. Die Hashes des Originaldatenträgers und der Kopie müssen gleich sein.
> md5sum /mnt/image-hda-20061218

Mit dem Parameter count bzw. skip können sowohl die maximale Anzahl an Blöcken ausgelesen bzw. eine bestimmte Anzahl an Blöcken übersprungen werden. Dies ist besonders hilfreich um ein Image auf mehrere Datenträger aufzuteilen (z.B. CD/DVD). Unter Windows wird eine Festplatte mit z.B. mit \\.\PhysicalDrive0 angesprochen.

Alternativen zu dd[Bearbeiten]

dd_rescue[Bearbeiten]

dd_rescue (http://www.garloff.de/kurt/linux/ddrescue/) ist eine alternative Version von dd, welche zwar keine Konvertierung von Dateien beherrscht (für die Forensik ohnehin nicht benötigt wird), allerdings ein besseres Fehlermanagement beherrscht.

Das Problem bei der normalen Version von dd ist die Größe eines Blockes. Ein Block bedeutet in diesem Fall, wie viele Daten auf einmal von der Quelle gelesen werden und danach gleichzeitig auf den Zieldatenträger geschrieben werden. Der Parameter bs gibt die Größe eines Blocks an. Die Blockgröße kann theoretisch von 1 Byte bis zu einigen GB liegen. Standardmäßig ist die Blockgröße 512 Byte (so wie normalerweise die Größe eines Blocks auf einer Festplatte). Generell gilt: Je größer die Blocksize ist, desto schneller ist der Kopiervorgang, da mehr Daten auf einmal kopiert werden. Das ist allerdings ein Problem, falls ein physikalischer Block nicht gelesen werden kann. Der Parameter conv gibt eigentlich die Art der Konvertierung der Daten an, bietet jedoch auch allgemeine Optionen zum Verhalten von dd. Ohne der Angabe des Parameters conv=noerror würde dd in so einem Fall sofort den Vorgang abbrechen. Ist der Parameter angegeben, wird bei einem nicht lesbaren Sektor auf dem Datenträger der gesamte logische Block von dd ungültig. Ist der Parameter conv=sync nicht gesetzt, würde dieser Block einfach im Image ausgelassen werden, anderenfalls wird der Block mit Nullen gefüllt (Dies ist wichtig, damit das Image die gleiche Größe wie die Ursprungsdatenträger hat). Daher ist die Verwendung von conv=noerror,sync empfohlen. dd_rescue bietet hier einen wesentlich besseres Fehlermanagement. Es verwendet eine Soft- und eine Hard-Blockgröße. Im Normalfall kopiert dd_rescue mit der Soft-Blockgröße. Tritt ein Fehler beim Einlesen eines Blockes auf, wird die Blockgröße schrittweise bis auf eine Hard-Blockgröße gesenkt und den Verlust von Daten so gering wie möglich zu halten. Danach wird die Blockgröße wieder auf die Soft-Blockgröße erhöht.

dcfldd[Bearbeiten]

dcfldd (http://dcfldd.sourceforge.net/) ist eine alternative Version von dd, welche einige Aktivitäten beim Erzeugen von Images automatisiert. dcfldd kann das erzeugte Image automatisch auf verschiedene Teile aufteilen, welche die ideale Größe für optische Medien haben. Weiters kann dcfldd beim Kopieren der Dateien automatisch über beliebig große Teile der Datenmenge Hashes berechnen.

# Dieser Befehl erstellt ein Image einer Festplatte und errechnet für jeweils 100 MB des Datenmaterials einen Hash (hashwindow).
# Mit dem Parameter hashlog wird eine Datei angegeben, welche sowohl die Hashes der einzelnen Teile als auch einen Hash über die
# gesamte Datenmenge enthält. Mit dem Parameter hash kann ein oder mehrere Hash-Algorithmen ausgewählt werden.
> dcfldd if=/dev/hda of=/mnt/hda.dd bs=16k hashwindow=100M hashlog=/mnt/hda.hashes hash=md5,sha1,sha256,sha384,sha512
# Aufteilen auf mehrere Teile mit je 600 Megabyte. Die Teile werden mit nnn als Extension durchnummeriert.
> dcfldd if=/dev/hda of=/mnt/hda.dd split=600M splitformat=nnn

Imaging mit EnCase[Bearbeiten]

Das Forensic-Tool EnCase bietet verschiedene Wege um ein Image eines Datenträgers zu erstellen. Die erste Möglichkeit besteht darin, einen Datenträger direkt auf einem Computer einzulesen auf dem Encase installiert ist und direkt mit Encase abzuspeichern. EnCase verwendet dabei ein proprietäres Format für die Speicherung des Image. Die zweite Möglichkeit besteht darin, den zu untersuchenden Computer mit einem bootfähigen Datenträger von EnCase zu booten und danach das Image über Netzwerk oder Kabel (USB/Parallel) auf einen Computer zu übertragen, auf welchem EnCase installiert ist. Die Übertragung über USB/Parallel kann die Geschwindigkeit des Imagen stark verlangsamen.