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.
.msget.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
.msgmuté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
SYSTEMde Windows 7 et de Windows 11 « dirty » ; - RecentDocs décodé avec yarp et libfwsi sur neuf ruches
NTUSER.DATpubliques ; - les tâches planifiées décodées de manière indépendante avec yarp sur sept ruches
SOFTWAREpubliques couvrant Windows 7–11, Server 2012 R2 et Server 2022 ; et - les structures de comptes SAM comparées avec
dissect.targetsur sept ruchesSAMpubliques.
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.