
Herramienta en Python que analiza el $MFT de NTFS para copiar archivos bloqueados durante la respuesta a incidentes, evitando los bloqueos del SO mediante la lectura de ubicaciones de disco en bruto. Admite copia recursiva, con comodines y de múltiples archivos con caché para mejorar el rendimiento.

Actualizado 2022-03-31
Durante un compromiso de Respuesta a Incidentes (IR), es necesario tener la capacidad de analizar archivos en el sistema de archivos. A veces, estos archivos están bloqueados por el sistema operativo (SO) porque están en uso, lo que es particularmente frustrante con los registros de eventos y los archivos del registro. TScopy permite al usuario, que se ejecuta con privilegios de administrador, acceder a archivos bloqueados analizando su ubicación sin procesar en el sistema de archivos y copiándolos sin preguntarle al SO.
Existen otras herramientas que realizan funciones similares, como RawCopy, que hemos utilizado y es la base de esta herramienta. Sin embargo, RawCopy tiene algunas desventajas que nos llevaron a desarrollar TScopy, incluyendo el rendimiento, el tamaño y la capacidad de incorporarlo en otras herramientas.
Este blog pretende presentar TScopy, pero también pedir ayuda. Como en todo desarrollo de software, cuanto más se usa una herramienta, más casos extremos se pueden encontrar. Pedimos que la gente pruebe la herramienta e informe de cualquier error.
TScopy es un script de Python utilizado para analizar el archivo $MFT de NTFS para localizar y copiar archivos específicos. Al analizar la Tabla de Archivos Maestra (MFT), el script evita los bloqueos del sistema operativo en los archivos. El script se basó originalmente en el trabajo de RawCopy. RawCopy está escrito en AutoIT y es difícil de modificar para nuestros propósitos. La decisión de portar RawCopy a Python se tomó debido a la necesidad de incorporar esta funcionalidad de forma nativa en nuestro conjunto de herramientas.
TScopy está diseñado para ejecutarse como un programa independiente o incluirse como un módulo de Python. La implementación en Python hace uso de las herramientas python-ntfs que se encuentran en https://github.com/williballenthin/python-ntfs. TScopy se basa en la funcionalidad base de python-ntfs para aislar la ubicación de cada archivo desde el disco en bruto.
TScopy está escrito en Python y organizado en clases para hacerlo más mantenible y legible que AutoIT. AutoIT puede ser marcado como malicioso por software antivirus o de detección porque algunos malware han utilizado su potencial.
La diferencia principal entre TScopy y RawCopy es la capacidad de copiar múltiples archivos por ejecución y almacenar en caché la estructura de archivos. Como se muestra en la imagen de abajo, TScopy tiene opciones para descargar un solo archivo, múltiples archivos delimitados por comas, el contenido de un directorio, rutas con comodines (archivos o directorios individuales), y directorios recursivos.
TScopy almacena en caché la ubicación de cada directorio y archivo a medida que itera la ruta completa del archivo de destino. Luego utiliza esta caché para optimizar la búsqueda de cualquier otro archivo, asegurando que las copias de archivos futuras se realicen mucho más rápido. Esta es una ventaja significativa sobre RawCopy, que itera sobre toda la ruta para cada archivo.
.\TScopy_x64.exe -h
usage:
TScopy_x64.exe -r -o c:\test -f c:\users\tscopy\ntuser.dat
Description: Copies only the ntuser.dat file to the c:\test directory
TScopy_x64.exe -o c:\test -f c:\Windows\system32\config
Description: Copies all files in the config directory but does not copy the directories under it.
TScopy_x64.exe -r -o c:\test -f c:\Windows\system32\config
Description: Copies all files and subdirectories in the config directory.
TScopy_x64.exe -r -o c:\test -f c:\users\*\ntuser*,c:\Windows\system32\config
Description: Uses Wildcards and listings to copy any file beginning with ntuser under users accounts and recursively copies the registry hives.
Copy protected files by parsing the MFT. Must be run with Administrator privileges
optional arguments:
-h, --help show this help message and exit
-f FILE, --file FILE Full path of the file or directory to be copied.
Filenames can be grouped in a comma ',' seperated
list. Wildcard '*' is accepted.
-o OUTPUTDIR, --outputdir OUTPUTDIR
Directory to copy files too. Copy will keep paths
-i, --ignore_saved_ref_nums
Script stores the Reference numbers and path info to
speed up internal run. This option will ignore and not
save the stored MFT reference numbers and path
-r, --recursive Recursively copies directory. Note this only works with
directories.
Hay una opción oculta '--debug', que habilita la salida de depuración.
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM -o e:\outputdir
Copia el registro SYSTEM a e:\outputdir El nuevo archivo se ubicará en e:\outputdir\windows\system32\config\SYSTEM
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM -o e:\outputdir -i
Copia el registro SYSTEM a e:\outputdir, pero ignora cualquier archivo en caché anterior y no guarda la caché actual en el disco
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM,c:\windows\system32\config\SOFTWARE -o e:\outputdir
Copia los registros SYSTEM y SOFTWARE a e:\outputdir
TScopy_x64.exe -f c:\windows\system32\config\ -o e:\outputdir
Copia el contenido del directorio config a e:\outputdir
TScopy_x64.exe -r -f c:\windows\system32\config\ -o e:\outputdir
Copia recursivamente el contenido del directorio config a e:\outputdir
TScopy_x64.exe -f c:\users\*\ntuser.dat -o e:\outputdir
Copia el archivo NTUSER.DAT de cada usuario a e:\outputdir
TScopy_x64.exe -f c:\users\*\ntuser.dat* -o e:\outputdir
Para cada usuario, copia todos los archivos que comienzan con NTUSER.DAT a 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
Para cada usuario, copia todas las listas de accesos directos, los archivos del registro y los comandos del historial de PowerShell a e:\outputdir
Por favor, reporte los errores en la sección de issues de la página de GitHub.