Zum Inhalt

Parservalidierung

Die von Juntei gepflegten Parser-Crates werden mit öffentlichem Beweismaterial und unabhängigen Implementierungen getestet. Diese Vergleiche helfen, Regressionen und Interpretationsunterschiede zu erkennen; sie machen keinen Parser unfehlbar. Bewahren Sie die Quellbeweise auf, prüfen Sie die Problem- bzw. Schadensfelder jedes Datensatzes und validieren Sie folgenreiche Befunde mit einem anderen Artefakt oder einer anderen Implementierung.

Die folgenden Aussagen bewahren die Validierungsinformationen, die früher in der Haupt-README von Juntei standen. Aktuelle Testdaten und Implementierungsdetails finden Sie in den verlinkten Parser-Repositorys.

Amcache

Juntei verwendet ys-amcache-parser, einen Apache-2.0-Fork von amcache-forensic von Security Ronin. Seine Ausgabedokumentation definiert jedes Feld zu ausführbaren Dateien, Geräten, Befunden und Zusammenfassungen.

Master File Table

Das Crate mft von ys-ntfs-parser ist ein gepflegter Fork des Crates mft von Omer Ben-Amram. Über acht $MFT-Dateien hinweg – das Beispiel des Crates, den NIST Hacking Case und sechs Dateien aus dem DFIR Artifact Museum – stimmten 1.048.733 CSV-Zeilen und -Spalten in der Reihenfolge mit einem Referenzparser überein. Die Vergleiche umfassten die Standardausgabe, --all-times, --short-names und --cutoff; die Darstellung der Zeitstempel war der beabsichtigte Unterschied.

NTFS-Transaktionsprotokoll ($LogFile)

Das Crate logfile von ys-ntfs-parser wird auf Basis von Sootmark ntfslog gepflegt. Seine Validierung umfasst sechs vollständige Protokolle aus dem DFIR Artifact Museum, öffentliche Testdaten der Versionen 1.1 und 2.0, dekodierte Redo/Undo-Metadaten sowie Journal-Schreibvorgänge, die mit unabhängig geparsten NTFS-Daten verglichen wurden. Detaillierte Angaben zur Abdeckung und bekannte Unterschiede finden Sie im Parser-Repository.

Juntei ergänzt CLI-Tests, die auf dem öffentlichen go-ntfs-Testvolume (2.129 Datensätze) jedes CSV-Feld mit JSON und JSONL vergleichen, separate Redo/Undo-Daten und Längen der Roh-Payloads prüfen, beschädigte Protokolle testen, das Überschreiben von Beweisen verweigern und verhindern, dass aktuelle MFT-Pfade wiederverwendeten Datensatznummern folgen. Regressionsfälle unterscheiden betroffene MFT-Datensätze von dem geöffneten Attribut, über das sie schreiben, prüfen flache Metadaten von Verzeichniseinträgen/Datenattributen und verhindern die volumeübergreifende Zuordnung von MFTs. Tests von auto-parse mit mehreren Volumes decken separate CSV-Dateien und eine einzelne JSONL-Datei mit Herkunftsangaben ab.

Der Befehl wurde außerdem an sechs privat gesicherten Windows-Protokollen geprüft: Alle 708.465 exportierten CSV-Datensätze stimmten Feld für Feld mit JSONL überein, und die Exporte von auto-parse pro Host behielten dieselbe Anzahl an Datensätzen. Die Quellbeweise werden nicht mit dem Repository verteilt. Diese Prüfungen bestätigen die Konsistenz der Ausgabe, nicht, dass jede protokollierte Transaktion eine abgeschlossene Benutzeraktion darstellt.

Prefetch

ys-prefetch-parser ist ein gepflegter Fork von frnsc-prefetch von ForensicRS. Seine dekodierte Ausgabe wurde mit libscca verglichen, der unabhängigen Prefetch-Implementierung von libyal.

USN-Journal

Das Crate usn von ys-ntfs-parser ist ein gepflegter Fork von Sootmark usn. Bei sechs echten Journalen stimmten Junteis zeitbezogene Pfade übergeordneter Verzeichnisse überall dort mit einem unabhängigen Parser überein, wo dieser Parser einen Pfad auflöste. Juntei löste zudem 4.321 Datensätze auf, die im Vergleich ungelöst blieben. Sein Carver erzeugte keine falschen Datensätze, als er mit 880 MB $MFT-Daten getestet wurde.

Verzeichnisindizes ($I30)

Das Modul i30 des Crates mft von ys-ntfs-parser liest INDX-Datensätze und deren Slack. Bei zwei $I30-Streams eines mit ntfs-3g erstellten Volumes (Junteis test_files/i30/) und bei drei öffentlichen, von Windows geschriebenen $I30-Beispielen stimmten seine verwendeten Einträge und die Einträge im Slack mit denen von dfir_ntfs von Maxim Suhanov überein, mit denselben Namen und Zeitstempeln. Wo dfir_ntfs eine Referenz auf das übergeordnete Verzeichnis jenseits von 32 Bit meldet (Bytes, die das übergeordnete Verzeichnis überschrieben haben), lässt Juntei das übergeordnete Verzeichnis leer.

Bootsektor ($Boot)

Das Crate boot von ys-ntfs-parser ist eine Eigenentwicklung von Yamato Security. Bei den fünf öffentlichen $Boot-Dateien des DFIR Artifact Museum (Windows 10, 11 und Server 2012 R2) stimmte jedes Feld mit einem Referenzparser überein. Bei mit mkntfs erstellten Volumes mit Sektoren von 512, 1.024 und 4.096 Byte und Clustern von 4 KiB bis 64 KiB stimmten die Größen, die Cluster von $MFT und $MFTMirr sowie die Seriennummern mit fsstat aus The Sleuth Kit überein. Der Windows-11-$Boot des Museums hat die Volume-Seriennummer, die die LNK-Datei desselben Hosts aufzeichnet, und die fünf Dateien haben denselben Bootcode.

Sicherheitsbeschreibungen ($Secure:$SDS)

Das Crate secure von ys-ntfs-parser ist eine Eigenentwicklung von Yamato Security. Über die fünf $SDS-Streams des Museums hinweg (7.808 Sicherheitsbeschreibungen, 60.781 ACEs) stimmten die Sicherheits-IDs, Hashes, Offsets, Besitzer, Gruppen, Steuerungs-Flags und ACE-Anzahlen mit einem Referenzparser überein, und Typ, Flags, Maske, SID und Objekttypen jedes ACE stimmten mit dissect.ntfs überein. Jeder aufgezeichnete Hash gehört zu seiner Sicherheitsbeschreibung, jede Spiegelkopie stimmt mit ihrem Eintrag überein, und jede Sicherheitsbeschreibung hat SDDL, einschließlich der Bedingungen ihrer 3.384 Callback-ACEs.

SRUM

ys-srum-parser basiert auf den Crates ese und srum von Sootmark. Über 11 echte Datenbanken hinweg stimmte jede Spalte der 45.255 ausgegebenen Einträge mit einer unabhängigen Dekodierung der von dissect.esedb bereitgestellten Werte überein.

Benutzerzugriffsprotokollierung

parse-ese ual liest UAL-Datenbanken mit demselben ESE-Leser. Über 16 echte Datenbanken hinweg (308 Zeilen, davon 145 Client-Zeilen) stimmte jeder Wert mit einer unabhängigen Dekodierung der von dissect.esedb bereitgestellten Werte überein. In jeder Client-Zeile reichten die Tage mit Anzahlen vom UTC-Tag von InsertDate bis zum UTC-Tag von LastAccess und ergaben in der Summe TotalAccesses.

Webbrowser

ys-browser-parser ist ein gepflegter Fork der Crates browser, sqlite und plist von Sootmark, ausgewählt nach einem Vergleich mit einer anderen Rust-Bibliothek sowie mit Plaso, Velociraptor (SQLiteHunter) und Hindsight anhand derselben Datenbanken. parse-sqlite browser wurde anhand von 38 öffentlichen Datenbanken mit der Bibliothek sqlite3 verglichen, die jeweils eine Kopie jeder Datenbank mit ihrer -wal-Datei las: die Testdateien von Plaso (Chrome 8 bis 68, Firefox 2 bis 118), mit Chromium 150 und Firefox 140 erstellte Profile sowie die Testdatenbanken von ys-browser-parser für den Formularverlauf. Alle 293 Besuche, 21 Downloads, 692 Cookies und 41 Formulareinträge stimmten überein. Gelöschte Einträge wurden nur dort wiederhergestellt, wo Einträge gelöscht worden waren: die zwei Seiten und zwei Besuche, die aus dem Verlauf von Firefox 140 gelöscht worden waren, mit ihren Zeiten, URLs und Titeln, sowie die gelöschten Formulareinträge der Testdatenbanken.

Internet Explorer und Edge Legacy (WebCache)

parse-ese webcache liest WebCacheV01.dat mit ys-browser-parser. Es wurde anhand der zwei öffentlichen WebCache-Datenbanken von Plaso mit dem ESE-Leser von dissect.database verglichen: einer von Internet Explorer 11 und einer „dirty“ Datenbank von Windows 10 mit Verlauf, Downloads und Cookies des alten Edge. Alle 4.156 Zeilen stimmten Wert für Wert überein: 44 Container, 182 Verlaufseinträge, 6 Downloads, 170 Cookies und 3.754 weitere Einträge. Der Vergleich dekodierte die Download-Datensätze eigenständig. Datensätze, die die Datenbanken als gelöscht kennzeichnen, wurden bei beiden ausgelassen.

Outlook

parse-file outlook liest PST-, OST-, .msg- und .oft-Dateien mit ys-outlook-parser, dessen PST- und OST-Leser ein Fork von Microsofts outlook-pst-rs ist und dessen .msg-Leser nach den offenen Spezifikationen von Microsoft geschrieben wurde.

  • PST und OST: 66 öffentliche PST- und OST-Dateien (Apache Tika, artemis, die Beispiele von Aspose.Email, das DFIR Artifact Museum, Enron, die Beispiele von GroupDocs, java-libpst, die Testdaten von libyal, outlook-pst-rs und pst-extractor) wurden Eigenschaft für Eigenschaft mit libpff verglichen: jede Eigenschaft jedes Nachrichtenspeichers, Ordners, jeder Nachricht, jedes Empfängers und Anhangs sowie die Daten jedes Anhangs. 324.175 Werte stimmten überein, und keiner wich ohne Erklärung ab. Die übrigen sind das, was nur ys-outlook-parser liest (15.846 Werte von Nachrichten, Empfängern und Anhängen, an denen libpff scheitert, und eines Nachrichtenspeichers, den es nicht öffnen kann; 8.223 von versteckten Elementen), Empfängerzellen, die libpff als leer oder null ausgibt, obwohl ihre Zeilen sie als nicht vorhanden ausweisen (49.077), Eintrags-IDs und Typen von Ordnern, die so berechnet werden, wie MAPI es tut (2.004), sowie Objekte und eingebettete Nachrichten, die libpff als Rohdaten ausgibt (480). Zwei der Dateien kann keiner der beiden Leser überhaupt lesen.
  • .msg und .oft: 214 öffentliche Dateien mit 2.404 Nachrichten, Empfängern und Anhängen und 41.002 Eigenschaften wurden mit extract-msg verglichen: 110.114 Werte stimmten überein, und jede der 791 Abweichungen ist erklärt: 601 sind Fehler von extract-msg bei Zeiten, 35 stammen aus ANSI-Dateien, die es mit der falschen Codepage dekodiert, und die übrigen sind das, was es auslässt oder hinzufügt.
  • Beschädigte Eingaben: Mehr als 260.000 mutierte .msg-Dateien und 160.000 mutierte PSTs sowie eigens präparierte Dateien wurden ohne Absturz, ohne Hängenbleiben und ohne unbegrenzten Speicherverbrauch gelesen.

LNK-Verknüpfungen

ys-lnk-parser ist ein gepflegter Fork des Crates shell von Sootmark. Er wurde anhand von 1.118 öffentlichen Verknüpfungen verglichen. Von den 30 mit dem Referenzparser gemeinsamen CSV-Spalten wichen 16 einzelne Werte ab: 13 Zielpfade mit beschädigten, abgeschnittenen, Platzhalter-, MTP- oder Systemsteuerungselementen; zwei Listen zusätzlicher Datenblöcke mit unbekannten oder abgeschnittenen Blöcken; und eine MFT-Referenz, die der Referenzparser aus anderen Bytes las. Juntei meldet beschädigte Strukturen, statt sie stillschweigend zu normalisieren.

Jump Lists

ys-jump-lists-parser nutzt die Arbeiten von Sootmark zu Compound Files und Jump Lists, wobei eingebettete Links von ys-lnk-parser dekodiert werden. Über 77 öffentliche Jump Lists hinweg stimmten alle 13.057 gemeinsamen Vergleichszellen – einschließlich Zeitstempeln auf 100 ns genau – mit dem Referenzparser überein. Sechs Dateien, die die Referenz ablehnte (leere benutzerdefinierte Listen, eine fehlende Fußzeile oder eine Datei, die keine Jump List war), wurden von Juntei entweder dekodiert oder ausdrücklich gemeldet.

ShimCache

ys-shimcache-parser ist ein gepflegter Fork von shimcache-forensic von Security Ronin, mit Unterstützung für Registry-Hives und Transaktionsprotokolle. Bei 20 öffentlichen SYSTEM-Hives (24 Steuerungssätze und 7.290 Einträge) sowie 17 eigenständigen AppCompatCache-Werten stimmte jeder Eintrag in Pfad, Zeitstempel, Ausführungs-Flag, Flags und Position mit der Ausgabe des Referenzparsers überein.

Microsoft-Defender-Quarantäne

ys-defender-history-parser ist ein gepflegter Fork des Crates defender von Sootmark. Ein Quarantäneordner, den die Testwerkzeuge des Parsers im Defender-Format geschrieben haben, wird vom unabhängigen Quarantäne-Reader von dissect.target übereinstimmend dekodiert.

Aus der Registry abgeleitete Artefakte

ys-registry-parser wird mit yarp verglichen, und zwar bei zugeordneten Schlüsseln, Werten, dem Einspielen von Transaktionen bei „dirty“ Hives, der Wiederherstellung freier Zellen, Zell-Slack, Daten jenseits der Hive-Bins sowie Datensätzen, die durch das Einspielen entfernt oder ersetzt wurden. Artefaktspezifische Vergleiche umfassen:

  • Dienste, Werte und Fehlerbehandlungsaktionen aus SYSTEM-Hives von Windows 7 und aus „dirty“ Windows-11-Hives;
  • mit yarp und libfwsi dekodierte RecentDocs über neun öffentliche NTUSER.DAT-Hives hinweg;
  • unabhängig mit yarp dekodierte geplante Aufgaben über sieben öffentliche SOFTWARE-Hives hinweg, die Windows 7–11, Server 2012 R2 und Server 2022 abdecken; sowie
  • mit dissect.target verglichene SAM-Kontostrukturen über sieben öffentliche SAM-Hives hinweg.

Die vollständige Liste der Referenzwerkzeuge, Formatforschung, Spezifikationen und öffentlichen Beweisquellen finden Sie unter Danksagungen.