Zeitleistenanalyse · Lektion 2 von 5
MACB auf NTFS: $SI vs. $FN
11 Min. Lesezeit
Jede Datei auf einem NTFS-Volume enthält mindestens acht Zeitstempel, und eine Zeitleiste ist nur so gut wie das Wissen des Prüfers darüber, wodurch sich jeder einzelne ändert. Diese Lektion erläutert die in Zeitleisten verwendete MACB-Notation, wo die acht Werte gespeichert sind, welche Komponente sie aktualisiert, wie normale Vorgänge wie Kopieren, Umbenennen und Bearbeiten sie verändern und wie Sie Werte erkennen, die nicht zu diesen Mustern passen. Modul 7 behandelt Timestomping als antiforensische Technik; hier geht es darum, eine Zeitleiste richtig zu lesen.
MACB-Notation
Zeitleisten kennzeichnen jeden Dateisystem-Zeitstempel mit einem von vier Buchstaben:
| Buchstabe | Bedeutung auf NTFS | Typische Ursache |
|---|---|---|
| M | Modified: Inhalt zuletzt geschrieben | Daten in das $DATA-Attribut der Datei geschrieben |
| A | Accessed: letzter Zugriff | Lesen oder Ausführen, sofern Aktualisierungen aktiviert sind |
| C | Changed: MFT-Eintrag zuletzt geändert | Jede Metadatenänderung: Umbenennung, Attribute, Sicherheit, Größe |
| B | Born: erstellt | Datei auf diesem Volume erstellt |
C ist die Falle: Auf NTFS bedeutet es, dass der MFT-Eintrag (die Metadaten) geändert wurde, nicht „erstellt“. Windows Explorer zeigt diesen Wert überhaupt nicht an.
Zeitleistenwerkzeuge fassen identische Werte in einer Zeile zusammen und zeigen die Buchstaben als vierstelligen Code an, wobei Punkte für nicht zutreffende Werte stehen. In der Ausgabe von mactime aus The Sleuth Kit bedeutet m.c., dass dieser Zeitpunkt sowohl für die Inhaltsänderung als auch für die Änderung des MFT-Eintrags gilt, .a.. steht nur für einen Zugriff, und macb bedeutet, dass alle vier Werte gleich sind, was bei der Erstellung normal ist. Die Bodyfile-Datei von TSK (fls -m) führt die $FN-Werte als separaten Eintrag auf, dessen Name mit ($FILE_NAME) endet, sodass eine Datei Zeilen für beide Sätze erzeugen kann. Die l2tcsv-Ausgabe von Plaso hat eine MACB-Spalte mit denselben Buchstaben in Großschreibung (Lektion 3.3).
Wo die acht Zeitstempel gespeichert sind
Lektion 1.3 hat die beiden Attribute eingeführt. Ihre Zeitstempel befinden sich an diesen Offsets innerhalb des Attributinhalts:
| Wert | $STANDARD_INFORMATION (0x10) | $FILE_NAME (0x30) |
|---|---|---|
| B, erstellt | 0x00 | 0x08 |
| M, geändert | 0x08 | 0x10 |
| C, MFT-Eintrag geändert | 0x10 | 0x18 |
| A, zugegriffen | 0x18 | 0x20 |
$FN beginnt mit der 8-Byte-Referenz auf das übergeordnete Verzeichnis, weshalb seine Zeitstempel bei 0x08 beginnen. Alle acht sind FILETIME-Werte: 64-Bit-Zähler von 100-Nanosekunden-Intervallen seit 1601-01-01 00:00:00 UTC (Lektion 3.1). Sie werden unabhängig von der Zeitzone des Systems in UTC gespeichert.
Eine Datei hat ein $SI-Attribut, aber ein $FN-Attribut pro Name. Wenn 8.3-Kurznamen aktiviert sind, hat Quarterly Report.xlsx ein Win32-$FN und ein DOS-$FN (QUARTE~1.XLS), und jedes enthält vier eigene Zeitstempel, die normalerweise identisch sind. Harte Links fügen weitere $FN-Attribute hinzu. Der $I30-Indexeintrag des übergeordneten Verzeichnisses enthält eine weitere Kopie des $FN einschließlich der Zeitstempel, die vom Datensatz abweichen können; im Index-Slack verbliebene Einträge können Zeitstempel gelöschter oder umbenannter Dateien bewahren.
Wer sie aktualisiert
$SI wird von NTFS während normaler Dateivorgänge gepflegt, und jeder Prozess mit Schreibzugriff auf die Dateiattribute kann es auch aus dem Benutzermodus setzen. SetFileTime setzt die Erstellungs-, Zugriffs- und Änderungszeit; der native Aufruf NtSetInformationFile mit der Klasse FileBasicInformation (sowie SetFileInformationByHandle) kann alle vier Werte setzen, einschließlich der Änderungszeit des MFT-Eintrags. Administratorrechte sind nicht erforderlich. Legitime Software verwendet diese Aufrufe ständig: Archivierungs-, Kopier- und Sicherungswerkzeuge, Installationsprogramme und Cloud-Synchronisierungsclients stellen Zeitstempel gezielt wieder her.
$FN wird vom NTFS-Treiber im Kernel geschrieben, wenn ein Name angelegt wird, was hauptsächlich beim Erstellen, Umbenennen und Verschieben geschieht. Es gibt keine dokumentierte API, um $FN direkt zu setzen. Deshalb ist $FN schwieriger zu fälschen, und deshalb ist der Vergleich mit $SI nützlich. Schwieriger bedeutet nicht unmöglich: Da beim Umbenennen oder Verschieben typischerweise $SI-Werte in das neue $FN kopiert werden, kann jemand $SI setzen und die Datei anschließend verschieben; direkte Schreibzugriffe auf den Datenträger können zudem alles ändern (Modul 7).
Der letzte Zugriff hat geringe Beweiskraft
Der Registrierungswert NtfsDisableLastAccessUpdate unter HKLM\SYSTEM\CurrentControlSet\Control\FileSystem steuert die Aktualisierung von A. Seit Windows Vista ist sie standardmäßig deaktiviert. Ab Windows 10 Version 1803 kann der Wert zwischen 0x80000000 und 0x80000003 liegen: Ist Bit 0x2 gesetzt, bedeutet dies „Systemverwaltet“, wobei Windows entscheidet und Aktualisierungen auf System-Volumes mit höchstens 128 GB aktiviert; ist Bit 0x1 gesetzt, bedeutet dies „deaktiviert“. fsutil behavior query disablelastaccess zeigt die Einstellung auf einem laufenden System an. Ob A aktualisiert wird, hängt also von der Version und vom Volume ab: Gehen Sie niemals ungeprüft vom einen oder anderen aus. Selbst wenn die Aktualisierung aktiviert ist, verzögert NTFS das Schreiben einer neuen Zugriffszeit auf den Datenträger um bis zu eine Stunde. Behandeln Sie A als Indiz mit geringer Beweiskraft: Ein alter A-Wert beweist nicht, dass die Datei nicht geöffnet wurde, und ein aktueller A-Wert kann von einer Virenprüfung, Indexierung oder Sicherung stammen. Verwenden Sie Prefetch, LNK-Dateien und Sprunglisten, um nachzuweisen, dass eine Datei oder ein Programm geöffnet wurde (Modul 2).
Faustregeln unter Windows 10 und 11
Untersuchungen zu NTFS unter Windows 10 und 11 haben tabellarisch erfasst, wie gängige Vorgänge die acht Werte verändern. Die Tabelle zeigt das typische Ergebnis; das Verhalten variiert je nach Windows-Build und ausführendem Programm. Testen Sie daher auf derselben Version, bevor Sie sich in einem Bericht auf eine Regel stützen.
| Vorgang | $SI M | $SI A | $SI C | $SI B | $FN M | $FN A | $FN C | $FN B |
|---|---|---|---|---|---|---|---|---|
| Erstellen | Neu | Neu | Neu | Neu | Neu | Neu | Neu | Neu |
| Inhalt ändern | Neu | Falls aktiviert | Neu | – | – | – | – | – |
| Lesen (Zugriff) | – | Falls aktiviert | – | – | – | – | – | – |
| Umbenennen, gleiches Volume | – | – | Neu | – | Aus $SI | Aus $SI | Aus $SI | Aus $SI |
| Verschieben, gleiches Volume | – | – | Neu | – | Aus $SI | Aus $SI | Aus $SI | Aus $SI |
| Kopieren (neue Datei) | Quelle | Neu | Neu | Neu | Neu | Neu | Neu | Neu |
| Auf anderes Volume verschieben | Quelle | Neu | Neu | Quelle | Neu | Neu | Neu | Neu |
„Neu“ ist der Zeitpunkt des Vorgangs, „–“ bedeutet unverändert, „Quelle“ bedeutet von der ursprünglichen Datei übernommen, und „Aus $SI“ bedeutet, dass das neue $FN die unmittelbar vor dem Vorgang vorhandenen $SI-Werte übernimmt. Das Verschieben auf ein anderes Volume ist ein Kopiervorgang mit anschließendem Löschen: Der neue Datensatz erhält wie beim Kopieren neue $FN-Zeitstempel, aber beim Ausschneiden und Einfügen in Explorer bleibt auch $SI B der Quelle erhalten, sodass sowohl M als auch B alt aussehen.
Drei Konsequenzen sind besonders wichtig:
- Kopierindikator. Eine Kopie behält M der Quelle, erhält aber ein neues B, daher ist M vor B das normale Anzeichen einer kopierten Datei und kein Anzeichen einer Manipulation.
- Archive und Downloads. Extraktionswerkzeuge setzen M normalerweise auf die im Archiv gespeicherte Zeit, und einige stellen auch B und A wieder her, sodass extrahierte Dateien Jahre alt aussehen können. Ein Browser-Download erhält normalerweise B beim ersten Erstellen der Datei und M beim Abschluss des Schreibvorgangs; einige Download-Werkzeuge setzen M anhand des Last-Modified-Headers des Servers. Ein alternativer Datenstrom namens
Zone.Identifierhilft dabei, Downloads zu erkennen. - Anwendungen mit sicherem Speicherverfahren. Viele Editoren, einschließlich Office-Paketen, speichern, indem sie eine temporäre Datei schreiben und diese so umbenennen, dass sie das Original ersetzt. Die Datei befindet sich dann in einem neuen MFT-Datensatz, während NTFS-Tunneling (ein nach Namen indizierter Cache mit standardmäßig 15 Sekunden Gültigkeit) der neuen Datei die alte $SI-Erstellungszeit zuweist. Ein unverändertes B beweist nicht, dass es sich um denselben Datensatz handelt.
Durchgerechnetes Beispiel: budget-q3.xlsx
(a) Von einem USB-Laufwerk kopiert. Auf dem FAT32-Laufwerk lag budget-q3.xlsx, zuletzt geändert am 2026-07-28T16:42:10Z. Die Datei wurde nach C:\Users\ana\Documents\ kopiert. Der Datensatz (beispielsweise in der Ausgabe von istat) zeigt:
| Wert | $SI (0x10) | $FN (0x30) |
|---|---|---|
| Erstellt | 2026-08-03T09:15:42.6183420Z | 2026-08-03T09:15:42.6183420Z |
| Geändert | 2026-07-28T16:42:10.0000000Z | 2026-08-03T09:15:42.6183420Z |
| MFT geändert | 2026-08-03T09:15:42.7401138Z | 2026-08-03T09:15:42.6183420Z |
| Zugegriffen | 2026-08-03T09:15:42.6183420Z | 2026-08-03T09:15:42.6183420Z |
Begründung: $SI M liegt 5 Tage, 16 Stunden und 33 Minuten vor $SI B, was dem Kopiermuster entspricht (die Spalte Copied von MFTECmd kennzeichnet dies). $SI B ist gleich $FN B, daher deutet nichts auf eine Rückdatierung hin. Der Sekundenbruchteil von $SI M ist null, weil FAT32 Änderungszeiten in 2-Sekunden-Schritten speichert und diese beim Kopieren beibehalten wurden; 16:42:10 ist eine gerade Sekunde. FAT speichert die Ortszeit, daher wurde für die Umrechnung in UTC die Zeitzone des kopierenden Systems verwendet (Lektion 3.5). Die Datei gelangte um 09:15:42Z auf das Volume; bestätigen Sie das USB-Gerät anhand der Artefakte aus Lektion 2.6.
(b) Am 2026-08-04T22:31:07.4410023Z bearbeitet und direkt in derselben Datei gespeichert. $SI M und $SI C werden zu 2026-08-04T22:31:07.4410023Z. $SI B bleibt bei 09:15:42.6183420Z, und $SI A bleibt unverändert, weil Aktualisierungen des letzten Zugriffs deaktiviert sind. Alle vier $FN-Werte bleiben bei 2026-08-03T09:15:42.6183420Z. Nun liegt M nach B, sodass der Kopierindikator aus $SI verschwunden ist; der Zeitpunkt, zu dem die Datei auf das Volume gelangte, bleibt in $SI B und in allen vier $FN-Werten erhalten. Falls ein Editor mit sicherem Speicherverfahren verwendet wurde, vergleichen Sie die Datensatznummer mit früheren Artefakten, bevor Sie davon ausgehen, dass es derselbe Datensatz ist.
Auffälligkeiten interpretieren
Muster, die nicht zur Tabelle passen, verdienen eine genauere Betrachtung:
- $SI B liegt vor $FN B. Nach dem Erstellen, Kopieren, Umbenennen und Verschieben innerhalb desselben Volumes ist $SI B gleich $FN B. Ausschneiden und Einfügen von einem anderen Volume sowie manche Archivextraktionen erzeugen ebenfalls ein älteres $SI B, belassen $SI C jedoch auf dem Zeitpunkt des Vorgangs.
- Sekundenbruchteile mit Nullwerten. Ein FILETIME-Wert, dessen 100-Nanosekunden-Anteil 0000000 ist. NTFS zeichnet mit voller Genauigkeit auf, während viele Werkzeuge zum Setzen von Zeitstempeln ganze Sekunden verwenden.
- $SI-Datumswerte vor der Installation des Betriebssystems, ermittelt anhand von
InstallDate(Unix-Sekunden) unterHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion. Funktionsupdates setzen diesen Wert zurück, vergleichen Sie daher sorgfältig.
Für jedes dieser Muster gibt es harmlose Ursachen: Archivextraktion, Installationsprogramme, Synchronisierungsclients und Dateien von FAT-Medien. Behandeln Sie sie als Anhaltspunkte, nicht als Feststellungen, und bestätigen Sie sie anhand von $UsnJrnl (ein Änderungsgrund BASIC_INFO_CHANGE zu dem Zeitpunkt, an dem die Werte gesetzt wurden) und $LogFile (Lektion 1.4 und Modul 7). MFTECmd gibt die acht Werte beispielsweise als Created0x10, Created0x30, LastModified0x10, LastModified0x30, LastRecordChange0x10, LastRecordChange0x30, LastAccess0x10 und LastAccess0x30 aus (0x10 ist $SI, 0x30 ist $FN) und kennzeichnet Datensätze mit SI<FN (ein $SI-Zeitstempel liegt vor dem $FN-Zeitstempel), uSecZeros (Sekundenbruchteile mit Nullwerten) und Copied. Einige Werkzeuge lassen $FN-Spalten leer, wenn die Werte mit $SI übereinstimmen. Prüfen Sie daher, wie Ihr Werkzeug sie darstellt.
Durchgerechnetes Beispiel: eine durch Timestomping manipulierte Datei
C:\ProgramData\Intel\igfxupd.exe zeigt für alle vier $SI-Werte 2019-03-19T04:12:00.0000000Z und für alle vier $FN-Werte 2026-08-05T02:14:48.9917304Z. InstallDate ist 1.676.037.931, was 2023-02-10T14:05:31Z entspricht.
Der rohe $SI-Erstellungswert besteht aus den 8 Bytes 00 E8 45 E6 09 DE D4 01, in Little-Endian-Reihenfolge gelesen als 0x01D4DE09E645E800 = 131.974.423.200.000.000. Geteilt durch 10.000.000 ergibt dies 13.197.442.320 Sekunden mit Rest 0: kein Sekundenbruchteil. Der $FN-Wert 134.303.696.889.917.304 ergibt einen Rest von 9.917.304, also 0,9917304 s.
Begründung: $SI B liegt sieben Jahre vor $FN B; die Sekundenbruchteile von $SI sind null, die von $FN dagegen nicht; $SI liegt vor der Installation; und auch $SI C wurde gesetzt, was SetFileTime allein nicht leisten kann. Ein normaler Kopiervorgang würde ein neues $SI B erzeugen, und ein Verschieben von einem anderen Volume oder eine Extraktion, die B wiederherstellt, würde $SI C dennoch auf dem Zeitpunkt des Vorgangs belassen. Die belastbare Aussage lautet, dass der Dateiname auf diesem Volume am 2026-08-05T02:14:48Z angelegt wurde und seine $SI-Werte wahrscheinlich danach gesetzt wurden, vorbehaltlich einer Bestätigung durch $UsnJrnl.
Prüfungsschwerpunkt: Rechnen Sie damit, bestimmen zu müssen, welche der acht Zeitstempel ein Vorgang verändert, M vor B als Hinweis auf eine Kopie zu erkennen und $FN gegenüber $SI zu bevorzugen, wenn $SI manipuliert wirkt. Praktische Aufgaben können nach dem Zeitpunkt fragen, zu dem eine Datei auf ein Volume gelangte; dieser ergibt sich aus B und muss in UTC mit voller Genauigkeit angegeben werden. Fragen zum letzten Zugriff prüfen, ob Sie wissen, dass dessen Aktualisierung normalerweise deaktiviert ist und er daher geringe Beweiskraft hat.
Kernpunkte
- MACB steht für Modified, Accessed, MFT entry Changed und Born, also Inhaltsänderung, Zugriff, Änderung des MFT-Eintrags und Erstellung; auf NTFS bedeutet C eine Metadatenänderung, nicht die Erstellung.
- $SI und jedes $FN enthalten vier FILETIME-Werte in UTC; eine Datei hat ein $SI, aber ein $FN pro Name, zuzüglich einer Kopie im $I30-Index des übergeordneten Verzeichnisses.
- $SI kann aus dem Benutzermodus von jedem Prozess mit Schreibzugriff auf die Attribute gesetzt werden; $FN wird beim Erstellen, Umbenennen und Verschieben vom Kernel geschrieben und ist daher schwieriger zu fälschen.
- Eine Kopie behält M der Quelle und erhält ein neues B, daher ist M vor B bei kopierten Dateien normal.
- Ob der letzte Zugriff aktualisiert wird, hängt von der Version und vom Volume ab; behandeln Sie A als Indiz mit geringer Beweiskraft.
- $SI B vor $FN B, Sekundenbruchteile mit Nullwerten und Datumswerte vor der Installation sind Anhaltspunkte, die mit $UsnJrnl und $LogFile bestätigt werden müssen.