
Outil Python qui analyse le $MFT NTFS pour copier des fichiers verrouillés lors d'une réponse à incident, en contournant les verrous du système d'exploitation par lecture des emplacements disque bruts. Prend en charge la copie récursive, avec jokers et multi-fichiers, avec mise en cache pour les performances.

Mise à jour le 2022-03-31
Lors d'une intervention de réponse aux incidents (IR), il est essentiel de pouvoir analyser les fichiers du système de fichiers. Parfois, ces fichiers sont verrouillés par le système d'exploitation (OS) car ils sont en cours d'utilisation, ce qui est particulièrement frustrant pour les journaux d'événements et les ruches du registre. TScopy permet à l'utilisateur, disposant de privilèges administrateur, d'accéder aux fichiers verrouillés en analysant leur emplacement brut dans le système de fichiers et en les copiant sans solliciter l'OS.
Il existe d'autres outils qui effectuent des fonctions similaires, comme RawCopy, que nous avons utilisé et qui sert de base à cet outil. Cependant, RawCopy présente certains inconvénients qui nous ont conduits à développer TScopy, notamment en termes de performances, de taille et de possibilité d'intégration dans d'autres outils.
Ce billet a pour but de présenter TScopy, mais aussi de demander de l'aide. Comme dans tout développement logiciel, plus un outil est utilisé, plus on découvre de cas particuliers. Nous demandons aux utilisateurs de tester l'outil et de signaler tout bug.
TScopy est un script Python utilisé pour analyser le fichier $MFT du système NTFS afin de localiser et copier des fichiers spécifiques. En analysant la table de fichiers maîtres (MFT), le script contourne les verrous du système d'exploitation sur les fichiers. Le script est initialement basé sur le travail de RawCopy. RawCopy est écrit en AutoIT et est difficile à modifier pour nos besoins. Le choix de porter RawCopy en Python a été fait en raison de la nécessité d'intégrer cette fonctionnalité nativement dans notre boîte à outils.
TScopy est conçu pour être exécuté comme un programme autonome ou inclus comme un module Python. L'implémentation Python utilise les outils python-ntfs disponibles sur https://github.com/williballenthin/python-ntfs. TScopy s'appuie sur les fonctionnalités de base de python-ntfs pour isoler l'emplacement de chaque fichier sur le disque brut.
TScopy est écrit en Python et organisé en classes pour le rendre plus maintenable et lisible qu'AutoIT. AutoIT peut être signalé comme malveillant par les antivirus ou les logiciels de détection car certains malwares ont utilisé son potentiel.
La principale différence entre TScopy et RawCopy est la possibilité de copier plusieurs fichiers par exécution et de mettre en cache la structure des fichiers. Comme le montre l'image ci-dessous, TScopy propose des options pour télécharger un seul fichier, plusieurs fichiers séparés par des virgules, le contenu d'un répertoire, des chemins avec des caractères génériques (fichiers ou répertoires individuels) et des répertoires récursifs.
TScopy met en cache l'emplacement de chaque répertoire et fichier lorsqu'il parcourt le chemin complet du fichier cible. Il utilise ensuite ce cache pour optimiser la recherche d'autres fichiers, garantissant ainsi que les copies futures sont beaucoup plus rapides. C'est un avantage significatif par rapport à RawCopy, qui parcourt l'intégralité du chemin pour chaque fichier.
.\TScopy_x64.exe -h
usage:
TScopy_x64.exe -r -o c:\test -f c:\users\tscopy\ntuser.dat
Description: Copie uniquement le fichier ntuser.dat dans le répertoire c:\test
TScopy_x64.exe -o c:\test -f c:\Windows\system32\config
Description: Copie tous les fichiers du répertoire config mais ne copie pas les sous-répertoires.
TScopy_x64.exe -r -o c:\test -f c:\Windows\system32\config
Description: Copie tous les fichiers et sous-répertoires du répertoire config.
TScopy_x64.exe -r -o c:\test -f c:\users\*\ntuser*,c:\Windows\system32\config
Description: Utilise des caractères génériques et des listes pour copier tout fichier commençant par ntuser sous les comptes utilisateurs et copie récursivement les ruches du registre.
Copie les fichiers protégés en analysant la MFT. Doit être exécuté avec des privilèges Administrateur
arguments optionnels:
-h, --help Affiche ce message d'aide et quitte
-f FILE, --file FILE Chemin complet du fichier ou du répertoire à copier.
Les noms de fichiers peuvent être regroupés dans une
liste séparée par des virgules ','. Le caractère
générique '*' est accepté.
-o OUTPUTDIR, --outputdir OUTPUTDIR
Répertoire de destination des fichiers. La copie
conserve les chemins.
-i, --ignore_saved_ref_nums
Le script stocke les numéros de référence et les
informations de chemin pour accélérer l'exécution
interne. Cette option ignore et ne sauvegarde pas les
numéros de référence MFT stockés et le chemin.
-r, --recursive Copie récursivement le répertoire. Notez que cela ne
fonctionne qu'avec les répertoires.
Il existe une option cachée '--debug', qui active la sortie de débogage.
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM -o e:\outputdir
Copie la ruche de registre SYSTEM dans e:\outputdir Le nouveau fichier sera situé dans e:\outputdir\windows\system32\config\SYSTEM
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM -o e:\outputdir -i
Copie la ruche de registre SYSTEM dans e:\outputdir mais ignore tout fichier précédemment mis en cache et ne sauvegarde pas le cache actuel sur le disque
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM,c:\windows\system32\config\SOFTWARE -o e:\outputdir
Copie les ruches de registre SYSTEM et SOFTWARE dans e:\outputdir
TScopy_x64.exe -f c:\windows\system32\config\ -o e:\outputdir
Copie le contenu du répertoire config dans e:\outputdir
TScopy_x64.exe -r -f c:\windows\system32\config\ -o e:\outputdir
Copie récursivement le contenu du répertoire config dans e:\outputdir
TScopy_x64.exe -f c:\users\*\ntuser.dat -o e:\outputdir
Copie le fichier NTUSER.DAT de chaque utilisateur dans e:\outputdir
TScopy_x64.exe -f c:\users\*\ntuser.dat* -o e:\outputdir
Pour chaque utilisateur, copie tous les fichiers commençant par NTUSER.DAT dans e:\outputdir
TScopy_x64.exe -f c:\users\*\AppData\Roaming\Microsoft\Windows\Recent,c:\windows\system32\config,c:\users\*\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt -o e:\outputdir
Pour chaque utilisateur, copie tous les jumplists, les ruches de registre et les commandes d'historique PowerShell dans e:\outputdir
Veuillez signaler les bugs dans la section issues de la page GitHub.