## Volatility3 : Récupération en mémoire d’un fichier TXT fermé ### Contexte - Image RAM : `challenge_bonus.raw` (archive [[challenge_bonus.7z]]) - Environnement : Docker Desktop + PowerShell (Windows) - Objectif : retrouver le contenu d’un fichier absent du disque, mais potentiellement présent en mémoire (dump RAM) ### Notes complémentaires - Toujours monter le dossier courant dans Docker avec `-v "${PWD}:/workspace"` sous PowerShell (attention aux guillemets). - Utiliser les options `--dump-dir /workspace/recovered` pour récupérer les fichiers dumpés dans un dossier accessible. - `$MFT` est souvent la dernière chance pour récupérer des fichiers petits et résidants en mémoire. - Si `dumpfiles` ne fonctionne pas, privilégier la lecture brute via `mftscan.ResidentData`. ## Étapes suivies pour le diagnostic Installer Volatility 3 en conteneur Docker sous Windows (avec Docker Desktop préinstallé) : ```powershell docker pull sk4la/volatility3 ``` Exécuter un bash Ubuntu et installer `binutils` ```powershell docker run -it --rm -v "${PWD}:/workspace" ubuntu bash ``` ![[_img-memo-volatility-MFTScan.png]] Quand le bash s'affiche, exécuter les commandes ```bash apt update && apt install binutils -y ``` ### Étapes clés de l’analyse **Scanner les fichiers en mémoire** : Repérer `Important.txt` dans la liste. ```powershell docker run -v "${PWD}:/workspace" sk4la/volatility3 -f /workspace/challenge_bonus.raw windows.filescan ``` On trouver un fichier nommé `Important.txt` avec l'offset `0x3fc398d0` (un emplacement précis dans la RAM). ![[_img-memo-volatility-MFTScan-1.png]] **Essayer d’extraire le fichier** : ```powershell docker run -v "${PWD}:/workspace" sk4la/volatility3 -f /workspace/challenge_bonus.raw windows.dumpfiles --name Important.txt --dump-dir /workspace/recovered --virtaddr 0x3fc398d0 ``` Sans succès je tente également avec `--physaddr 0x3fc398d0` à la place de `--virtaddr 0x3fc398d0` (Souvent?) impossible si le fichier n’est pas alloué ou s'il n'est pas résidant (ex: effacé, ouvert en mémoire uniquement). **Explorer la hiérarchie des processus (pstree)** : ```powershell docker run -v "${PWD}:/workspace" sk4la/volatility3 -f /workspace/challenge_bonus.raw windows.pstree |Select-String "not" -Context 5,5 ``` Chercher un éditeur texte (ex : notepad.exe) lié au fichier. Je découvre "StikyNot.exe", en me documentant c'est pour rédiger des post-it sur le bureau Windows, mais il ne gère pas de fichiers txt. **Recherche textuelle dans la RAM** : La commande strings permet de parcourir le dump mémoire, mais elle n'est pas dispo sous Windows, donc j'utilise le bash Ubuntu précédemment ouvert : La commande strings a été préalablement installée avec `binutils` : ```bash strings challenge_bonus.raw | grep -i "important.txt" ``` On trouve `"C:\Windows\system32\NOTEPAD.EXE" C:\Users\SlimShady\Desktop\Important.txt`. Cela indique que Notepad a ouvert ce fichier, mais n’est plus actif (car absent du `pslist` et du `pstree`) **Gratter autour des références Notepad et Important.txt** - Chercher dans la RAM plusieurs lignes autour (ex : 200 lignes après) en `base64` ou en texte brut pour retrouver le contenu. - Parfois du contenu apparaît, car notepad est encore en mémoire ou si le fichier est résidant. - Ce n'est pas le cas ici... **Le rôle de `$MFT` (Master File Table)** en RAM - `$MFT` contient les métadonnées des fichiers NTFS, parfois le contenu *résidant* des petits fichiers. - Cela peut aider à récupérer du contenu qui ne se trouve plus dans un fichier alloué. **Scanner le `$MFT` avec Volatility 3** ```powershell docker run -v "${PWD}:/workspace" sk4la/volatility3 -f /workspace/challenge_bonus.raw windows.mftscan.MFTScan |select-string "important.txt" ``` Vérifier que `Important.txt` est bien listé. **Extraire les données résidentes du `$MFT`** avec ResidentData ```powershell docker run -v "${PWD}:/workspace" sk4la/volatility3 -f /workspace/challenge_bonus.raw windows.mftscan.ResidentData | Select-String -Pattern "Important.txt" -Context 0,20 ``` Récupérer le contenu texte directement depuis les entrées `$MFT` (flouté ci-dessous en bas à droite) : ![[_asset-memo-volatility-MFTScan.png]]