Mes contributions à Volatility 3 : l'hibernation fusionnée, netscan en route
Catégorie : Volatility
Résumé
Deux sujets, du 26 septembre au 17 octobre 2026. L'hibernation : deux commentaires sur la PR amont #1036, une PR de correctifs fusionnée par l'auteur de la couche (forensicxlab#1), et un correctif de lint en attente (forensicxlab#2). Et windows.netscan sur Windows 11, corrigé en local et validé sur six builds, dont la PR n'est pas encore ouverte. Entre les deux, une matrice de 104 plugins sur six images RAM, qui a dit ce qui marche, ce qui ne marche pas, et pourquoi. Le détail est dans le billet sur l'hibernation et celui sur netscan.
Le tableau
| Pièce | Sujet | Date | État |
|---|---|---|---|
| commentaire sur #1036 | 24H2 : offset du compteur par build, règles de bits, patch --version 4 |
26/09 | lu, pas de réponse écrite |
| forensicxlab#1 | autodétection de l'offset, taille réelle passée au décodeur Huffman, scripts et campagne sur six builds | ouverte le 14/10 | fusionnée le 16/10 par k1nd0ne |
| forensicxlab#2 | import codecs inutilisé qui faisait échouer le job ruff de #1036 |
16/10 | ouverte |
| commentaire sur #1036 | signale l'échec du lint et lie forensicxlab#2 | 16/10 | |
branche locale netscan-win11-24h2 |
objet TCP à +8 octets depuis 26100, tables _TCP_ENDPOINT par build |
14 au 17/10 | validée, PR à venir |
| matrice RAM | 104 plugins windows.* sur six builds, deux rounds |
14 au 17/10 | tri fait, plugins GUI à corriger |
L'hibernation
Le commentaire du 26 septembre. Sur un hiberfil.sys réel de Windows 11 24H2, Dump ne convertissait que la section de boot. J'ai posté l'analyse : KernelPagesProcessed lu à 0x230 alors qu'il est à 0x250 sur ce build et à 0x238 sur le 24H2 d'ISO ; le bit 29 de l'en-tête des sets qui n'appartient plus à la taille et le bit 30 qui indique Huffman ; un patch --version 4 ; et un script de contrôle. Pas de réponse écrite de l'auteur, mais la suite montre qu'il a lu.
forensicxlab#1. Plutôt que d'attendre, j'ai ouvert une PR vers sa branche feature/hibernation-layer, avec trois choses : l'autodétection de l'offset (essayer 0x238 puis 0x250, garder celui dont la valeur est égale à la longueur de la chaîne des sets, sinon refuser), un deuxième correctif trouvé pendant la campagne (le décodeur recevait toujours 65 536 octets et plantait sur les sets Huffman de moins de 16 pages, présents dans tous les fichiers de 21H2 à 24H2), et les scripts avec les résultats sur 24 fichiers de six builds sous contrib/hibernation_checks/. Deux commits. Fusionnée le 16 octobre par k1nd0ne, sans demande de changement. La PR amont #1036 porte donc ces commits.
forensicxlab#2. Après la fusion, le job lint-and-format de #1036 échouait sur un import codecs inutilisé, préexistant. Une ligne, ruff rejoué en local. Ouverte le 16 octobre, en attente.
Ce qui n'est pas couvert : l'hibernation complète (S4) sur Windows 11, x86, les révisions 26100 autres que .1742, .6584 et .9445.
La matrice RAM et netscan
Après la PR, j'ai capturé la RAM vive des six VM Windows 11 et passé tous les plugins windows.*, 103 à 104 par build, deux rounds. 62 passent partout, 23 ont le même résultat non concluant partout, le reste varie selon le build. Le tri : la plupart des variations sont de la résidence mémoire ou des données de la VM, pas des bugs. Deux vrais bugs : netscan, et les plugins GUI (desktops, deskscan, windows.windows), dont les structures win32k ont changé sans que les tables de symboles suivent, et sans PDB public.
netscan. Sur 24H2, 25H2 et 26H1, rien ; sur 21H2 à 23H2, ports à zéro ou propriétaire manquant. Deux causes trouvées et corrigées : l'objet commence 8 octets après le corps de l'allocation de pool depuis 26100 (prouvé par comparaison avec netstat), et la disposition de _TCP_ENDPOINT change à chaque build, retrouvée sur de vraies connexions dont je connais tout. Quatre tables JSON, validation sur six builds. Un commit et un diff sur une branche locale ; il reste à squasher, passer ruff, et écrire le texte de la PR vers develop.
Les plugins GUI sont le chantier suivant : il faudra retrouver tagDESKTOP et tagWND à la main.
Sources
- #1036 et ses commentaires, forensicxlab#1, forensicxlab#2.
contrib/hibernation_checks/campaign_2026-10/SUMMARY.mddans la branche fusionnée.- La matrice RAM et les scripts netscan : en local, fournis sur demande.