Aller au contenu

Validation des parseurs

Les crates de parseurs maintenues par Juntei sont testées sur des preuves publiques et comparées à des implémentations indépendantes. Ces comparaisons aident à détecter les régressions et les différences d'interprétation ; elles ne rendent aucun parseur infaillible. Conservez les preuves sources, examinez les champs de problèmes ou de dommages de chaque enregistrement, et validez les constats importants avec un autre artefact ou une autre implémentation.

Les informations ci-dessous reprennent les informations de validation qui figuraient auparavant dans le README principal de Juntei. Consultez les dépôts des parseurs liés pour les jeux de test actuels et les détails d'implémentation.

Amcache

Juntei utilise ys-amcache-parser, un fork sous licence Apache-2.0 de amcache-forensic de Security Ronin. Sa documentation de sortie définit chaque champ d'exécutable, de périphérique, de constat et de résumé.

Table de fichiers principale

La crate mft de ys-ntfs-parser est un fork maintenu de la crate mft d'Omer Ben-Amram. Sur huit fichiers $MFT (l'échantillon de la crate, le NIST hacking case et six fichiers du DFIR Artifact Museum), 1 048 733 lignes CSV et leurs colonnes correspondaient dans l'ordre à celles d'un parseur de référence. Les comparaisons ont porté sur la sortie par défaut, --all-times, --short-names et --cutoff ; la présentation des horodatages constituait la différence intentionnelle.

Journal des transactions NTFS ($LogFile)

La crate logfile de ys-ntfs-parser est maintenue à partir de Sootmark ntfslog. Sa validation couvre six journaux complets du DFIR Artifact Museum, des jeux de test publics en versions 1.1 et 2.0, les métadonnées redo/undo décodées, et des écritures de journal comparées à des données NTFS analysées de manière indépendante. Consultez le dépôt du parseur pour le détail de la couverture et des différences connues.

Juntei ajoute des tests CLI qui comparent chaque champ CSV avec le JSON et le JSONL sur le volume de test public go-ntfs (2 129 enregistrements), vérifient la séparation des données redo/undo et la longueur des charges utiles brutes, testent des journaux endommagés, refusent l'écrasement des preuves et empêchent les chemins MFT actuels de suivre des numéros d'enregistrement réutilisés. Des cas de non-régression distinguent les enregistrements MFT affectés de l'attribut ouvert par lequel ils sont écrits, vérifient les métadonnées des entrées de répertoire/attributs de données à plat, et empêchent l'appariement de MFT entre volumes. Les tests auto-parse multi-volumes couvrent des fichiers CSV distincts et un fichier JSONL unique avec provenance.

La commande a également été vérifiée sur six journaux Windows collectés de manière privée : les 708 465 enregistrements CSV exportés correspondaient champ par champ au JSONL, et les exports auto-parse par hôte conservaient les mêmes nombres d'enregistrements. Les preuves sources ne sont pas distribuées avec le dépôt. Ces vérifications contrôlent la cohérence de la sortie, et non le fait que chaque transaction journalisée représente une action utilisateur achevée.

Prefetch

ys-prefetch-parser est un fork maintenu de frnsc-prefetch de ForensicRS. Sa sortie décodée a été comparée à libscca, l'implémentation Prefetch indépendante de libyal.

Journal USN

La crate usn de ys-ntfs-parser est un fork maintenu de Sootmark usn. Sur six journaux réels, les chemins parents de Juntei, tenant compte du temps, correspondaient à ceux d'un parseur indépendant partout où ce parseur résolvait un chemin. Juntei a également résolu 4 321 enregistrements que la comparaison laissait non résolus. Son outil de carving n'a produit aucun faux enregistrement lors des tests sur 880 Mo de données $MFT.

Index de répertoires ($I30)

Le module i30 de la crate mft de ys-ntfs-parser lit les enregistrements INDX et leur slack. Sur deux flux $I30 d'un volume créé avec ntfs-3g (test_files/i30/ de Juntei) et sur trois échantillons $I30 publics écrits par Windows, ses entrées utilisées et celles présentes dans le slack correspondaient à celles de dfir_ntfs de Maxim Suhanov, avec les mêmes noms et horodatages. Lorsque dfir_ntfs signale une référence parente dépassant 32 bits (des octets ayant écrasé le parent), Juntei laisse le parent vide.

Secteur de démarrage ($Boot)

La crate boot de ys-ntfs-parser est développée en propre par Yamato Security. Sur les cinq fichiers $Boot publics du DFIR Artifact Museum (Windows 10, 11 et Server 2012 R2), chaque champ correspondait à celui d'un parseur de référence. Sur des volumes créés avec mkntfs avec des secteurs de 512, 1 024 et 4 096 octets et des clusters de 4 Kio à 64 Kio, les tailles, les clusters $MFT et $MFTMirr et les numéros de série correspondaient à ceux de fsstat de The Sleuth Kit. Le $Boot Windows 11 du Museum porte le numéro de série de volume qu'enregistre le fichier LNK du même hôte, et les cinq fichiers ont le même code de démarrage.

Descripteurs de sécurité ($Secure:$SDS)

La crate secure de ys-ntfs-parser est développée en propre par Yamato Security. Sur les cinq flux $SDS du Museum (7 808 descripteurs, 60 781 ACE), les identifiants de sécurité, hachages, décalages, propriétaires, groupes, indicateurs de contrôle et nombres d'ACE correspondaient à ceux d'un parseur de référence, et le type, les indicateurs, le masque, le SID et les types d'objets de chaque ACE correspondaient à dissect.ntfs. Chaque hachage enregistré est bien celui de son descripteur, chaque copie miroir correspond à son entrée, et chaque descripteur dispose d'un SDDL, y compris les conditions de ses 3 384 ACE de rappel (callback).

SRUM

ys-srum-parser est basé sur les crates ese et srum de Sootmark. Sur 11 bases de données réelles, chaque colonne des 45 255 entrées émises correspondait à un décodage indépendant des valeurs exposées par dissect.esedb.

Journalisation des accès utilisateur

parse-ese ual lit les bases de données UAL avec le même lecteur ESE. Sur 16 bases de données réelles (308 lignes, dont 145 lignes de clients), chaque valeur correspondait à un décodage indépendant des valeurs exposées par dissect.esedb. Dans chaque ligne de client, le premier jour comportant un décompte était le jour UTC de InsertDate, le dernier le jour UTC de LastAccess, et la somme des décomptes était égale à TotalAccesses.

Navigateurs web

ys-browser-parser est un fork maintenu des crates browser, sqlite et plist de Sootmark, choisi après l'avoir comparé à une autre bibliothèque Rust ainsi qu'à Plaso, Velociraptor (SQLiteHunter) et Hindsight sur les mêmes bases de données. parse-sqlite browser a été comparé à la bibliothèque sqlite3 lisant une copie de chaque base de données avec son fichier -wal, sur 38 bases de données publiques : les fichiers de test de Plaso (Chrome 8 à 68, Firefox 2 à 118), des profils créés par Chromium 150 et Firefox 140, et les bases de données de test de l'historique des formulaires de ys-browser-parser. Les 293 visites, 21 téléchargements, 692 cookies et 41 entrées de formulaires correspondaient tous. Des entrées supprimées n'ont été récupérées que là où des entrées avaient été supprimées : les deux pages et les deux visites supprimées de l'historique de Firefox 140, avec leurs heures, URL et titres, et les entrées de formulaires supprimées des bases de données de test.

Internet Explorer et l'ancien Edge (WebCache)

parse-ese webcache lit WebCacheV01.dat avec ys-browser-parser. Il a été comparé au lecteur ESE de dissect.database sur les deux bases de données WebCache publiques de Plaso : l'une d'Internet Explorer 11, et une base « dirty » de Windows 10 contenant l'historique, les téléchargements et les cookies de l'ancien Edge. Les 4 156 lignes correspondaient toutes, valeur par valeur : 44 conteneurs, 182 entrées d'historique, 6 téléchargements, 170 cookies et 3 754 autres entrées. La comparaison a décodé elle-même les enregistrements de téléchargement. Les enregistrements que les bases de données marquent comme supprimés ont été exclus des deux côtés.

Outlook

parse-file outlook lit les fichiers PST, OST, .msg et .oft avec ys-outlook-parser, dont le lecteur PST et OST est un fork d'outlook-pst-rs de Microsoft et dont le lecteur .msg a été écrit à partir des spécifications ouvertes de Microsoft.

  • PST et OST : 66 fichiers PST et OST publics (Apache Tika, artemis, les exemples d'Aspose.Email, le DFIR Artifact Museum, Enron, les exemples de GroupDocs, java-libpst, les données de test de libyal, outlook-pst-rs et pst-extractor) ont été comparés à libpff, propriété par propriété : chaque propriété de chaque banque de messages, dossier, message, destinataire et pièce jointe, et les données de chaque pièce jointe. 324 175 valeurs étaient identiques, et aucune ne différait sans explication. Les autres sont ce que seul ys-outlook-parser lit (15 846 valeurs de messages, de destinataires et de pièces jointes sur lesquels libpff échoue, et d'une banque de messages qu'il ne peut pas ouvrir ; 8 223 d'éléments masqués), des cellules de destinataires que libpff donne vides ou à zéro alors que leurs lignes les disent absentes (49 077), des identifiants d'entrée et des types de dossiers calculés comme le fait MAPI (2 004), et des objets et messages incorporés que libpff donne sous forme de données brutes (480). Deux des fichiers ne sont lus par aucun des deux lecteurs.
  • .msg et .oft : 214 fichiers publics, contenant 2 404 messages, destinataires et pièces jointes et 41 002 propriétés, ont été comparés à extract-msg : 110 114 valeurs étaient identiques, et chacune des 791 qui diffèrent est expliquée : 601 sont des erreurs d'extract-msg sur les heures, 35 proviennent de fichiers ANSI qu'il décode avec la mauvaise page de codes, et les autres sont ce qu'il omet ou ajoute.
  • Entrées endommagées : plus de 260 000 fichiers .msg mutés et 160 000 PST mutés, ainsi que des fichiers spécialement conçus, ont été lus sans plantage, sans blocage et sans consommation de mémoire illimitée.

Raccourcis LNK

ys-lnk-parser est un fork maintenu de la crate shell de Sootmark. Il a été comparé sur 1 118 raccourcis publics. Sur les 30 colonnes CSV partagées avec le parseur de référence, 16 valeurs individuelles différaient : 13 chemins cibles impliquant des éléments endommagés, tronqués, fictifs, MTP ou du Panneau de configuration ; deux listes de blocs de données supplémentaires impliquant des blocs inconnus ou tronqués ; et une référence MFT que le parseur de référence lisait à partir d'octets différents. Juntei signale les structures endommagées au lieu de les normaliser silencieusement.

Jump Lists

ys-jump-lists-parser utilise les travaux de Sootmark sur les fichiers composés et les Jump Lists, les liens intégrés étant décodés par ys-lnk-parser. Sur 77 Jump Lists publiques, les 13 057 cellules de comparaison partagées, y compris les horodatages à 100 ns près, correspondaient au parseur de référence. Six fichiers refusés par la référence (listes personnalisées vides, pied de page manquant, ou fichier qui n'était pas une Jump List) ont été soit décodés, soit explicitement signalés par Juntei.

ShimCache

ys-shimcache-parser est un fork maintenu de shimcache-forensic de Security Ronin, avec la prise en charge des ruches du Registre et des journaux de transactions. Sur 20 ruches SYSTEM publiques (24 jeux de contrôle et 7 290 entrées) ainsi que 17 valeurs AppCompatCache autonomes, chaque entrée correspondait au chemin, à l'horodatage, à l'indicateur d'exécution, aux indicateurs et à la position émis par le parseur de référence.

Quarantaine Microsoft Defender

ys-defender-history-parser est un fork maintenu de la crate defender de Sootmark. Un dossier de quarantaine écrit au format de Defender par l'outillage de test du parseur est décodé de manière cohérente par le lecteur de quarantaine indépendant de dissect.target.

Artefacts issus du Registre

ys-registry-parser est comparé à yarp pour les clés et valeurs allouées, la relecture des transactions des ruches « dirty », la récupération des cellules libres, le cell slack, les données au-delà des hive bins, ainsi que les enregistrements supprimés ou remplacés par la relecture. Les comparaisons propres aux artefacts comprennent :

  • les services, les valeurs et les actions en cas d'échec provenant de ruches SYSTEM de Windows 7 et de Windows 11 « dirty » ;
  • RecentDocs décodé avec yarp et libfwsi sur neuf ruches NTUSER.DAT publiques ;
  • les tâches planifiées décodées de manière indépendante avec yarp sur sept ruches SOFTWARE publiques couvrant Windows 7–11, Server 2012 R2 et Server 2022 ; et
  • les structures de comptes SAM comparées avec dissect.target sur sept ruches SAM publiques.

Consultez Remerciements pour la liste complète des outils de référence, des recherches sur les formats, des spécifications et des sources de preuves publiques.