NTFS Forensik: Wann bietet sich eine Triage an?

Stellen wir uns folgendes Szenario vor: Ein Kunde ruft an, Hacker haben auf einigen Computern Daten manipuliert. Die Forensik soll nun herausfinden, welche Dateien genau verändert wurden. Die Zeit drängt, denn weiterer Schaden soll vermieden werden. Die Daten der Rechner, jeweils 500GB groß, müssen also so schnell wie möglich in die Forensik.

Doch die Forensikerinnen und Forensiker bräuchten mehrere Stunden mit dem Auto, bis sie beim Kunden wären. Eine Übertragung der Daten per Internet auf den sicheren Datenspeicher würde ebenfalls etliche Stunden dauern. Deswegen bietet es sich an, nur eine sogenannte „Triage“ zu erstellen. Eine Spezialsoftware sammelt nur die Daten ein, die ausreichend sind, damit sich die Forensiker schnell ein Bild machen können. Aber: Reichen die Daten für eine forensische Analyse aus? Kurz gesagt: Nein. Aber warum nicht?
 

Technische Details

Jedes NTFS-Volume hat mehrere Systemdateien, die notwendig sind, um die Daten der Nutzerinnen und Nutzer zu verwalten. Kern des Dateisystems ist die Datei $MFT (Master File Table). Diese enthält für jede Datei des Volume einen Eintrag, der den Namen der Datei, verschiedene Dateieigenschaften und auch Informationen zum Speicherort der Dateiinhalte enthält. Die Datei $MFT ist obligatorischer Inhalt einer Triage.

Folgende Inhalte der $MFT sind wichtig in einer forensischen Untersuchung:

NTFS-Attribut Eigenschaften der Datei
$STANDARD_INFORMATION Zeitstempel der Datei
$FILENAME Dateiname, Zeitstempel des $FILENAME-Attributs


Zur Erstellung einer Timeline (zeitliche Abfolge von Änderungen am Dateisystem) ist das eine ausreichende Basis. Dennoch enthält die $MFT nicht alle Informationen. Nachfolgend wird beschrieben, welche weiteren Daten für die Forensik wichtig sind und wo diese gespeichert werden.

 

$UsnJrnl

Jede Änderung an einer Datei wird in der $UsnJrnl („UsnJrnl“ steht für „Update Sequence Number Journal“) protokolliert. Vielleicht hatte eine Datei vor kurzem einen anderen Namen? Oder war sie in einem anderen Ordner gespeichert? Derartige Änderungen werden – zusammen mit einem Zeitstempel – protokolliert. Für eine forensische Analyse müssen auch Veränderungen an Dateien untersucht werden.

Die Datei $UsnJrnl ist jedoch u.U. sehr groß (mehrere GB) und wird deswegen selten als Teil einer Triage gesichert. Das schränkt die Untersuchungsmöglichkeiten ein.
 

$LogFile

NTFS ist ein sogenanntes „Journalling Filesystem“. Das bedeutet, dass Änderung an einer Datei entweder vollständig – oder gar nicht geschrieben werden. Wenn beispielsweise das Betriebssystem abstürzt, oder der Datenträger entfernt wird, während eine Datei geschrieben wird, dann bleibt die Datei im Zustand vor dem Beginn des Schreibzugriffs. Eine Datei wird nicht in einen inkonsistenten Zustand gebracht. Für diese Funktionalität wird ein Zwischenspeicher benötigt, der bei NTFS in der Datei $LogFile abgelegt wird.

Wenn bei einer Triage die Datei $LogFile nicht gesichert wird, sind Änderungen an einer wichtigen Datei für die Forensik möglicherweise nicht sichtbar.
 

$Secure

Sicherheitseinstellungen einer Datei werden in folgenden Attributen gespeichert:

  • $STANDARD_INFORMATION (Felder Owner ID und Security ID)
  • $SECURITY_DESCRIPTOR

Die Felder Owner ID and Security ID enthalten nur Verweise auf Einträge in der Datei $Secure. In dieser sind der Eigentümer der Datei bzw. Informationen zum Verschlüsselungsschlüssel der Datei gespeichert. Daher können Informationen über den Eigentümer der Datei nicht dargestellt werden, wenn $Secure nicht Inhalt der Triage ist.
 

Nichtresidente Attribute

Die bisher beschriebenen Daten lassen sich durch das Kopieren bestimmter Dateien sichern. Anders verhält es sich mit nichtresidenten Attributen.

Ein $MFT-Eintrag ist 1024 Byte groß und enthält idealerweise alle Attribute einer Datei. Die Attribute können jedoch verschieden groß sein. Beispielsweise ist das $FILENAME-Attribut größer, wenn der Dateiname länger ist. Einige Attribute können auch mehrmals vorkommen; etwa, wenn eine Datei einen speziellen Dateinamen für ein Windows-Subsystem (POSIX oder DOS) hat; oder wenn eine Datei mehrere Streams hat. Es kann also durchaus passieren, dass ein $MFT-Eintrag nicht groß genug für alle Attribute ist. Dann wird der Inhalt einiger Attribute nicht mehr direkt im $MFT-Eintrag, sondern außerhalb der $MFT gespeichert. Dazu werden sogenannte Extends genutzt, die zur jeweiligen Datei gehören.

Bei der Erstellung einer Triage ist es deshalb nicht möglich, nichtresidente Attribute zu sichern. Die $MFT allein kann also immer potenziell unvollständig sein.
 

Zusammenfassung

  • Triage ist OK wenn man Zeitdruck hat, oder man sich auf eine kleine Datenmenge beschränken muss. Man sollte immer im Hinterkopf behalten, dass die Daten unvollständig sind. Eine gerichtsfeste Analyse ist so nicht möglich.
  • Wenn man Zeit und ausreichend Speicher hat, sollte eine vollständige Sicherung immer vorgezogen werden.
  • Eine Analyse sollte immer mit dem Werkzeug erfolgen, das alle vorhandenen Daten mit einbezieht. Wenn man ein vollständiges Image hat, sollte man bspw. lieber mit dem Sleuthkit (bspw. fls) arbeiten, anstatt einzelne Metadateien wie $MFT zu analysieren.