
Ferramenta Python que analisa o $MFT do NTFS para copiar arquivos bloqueados durante resposta a incidentes, ignorando bloqueios do SO ao ler locais brutos do disco. Suporta cópia recursiva, com curingas e de múltiplos arquivos com cache para desempenho.

Atualizado em 2022-03-31
É um requisito durante um engajamento de Resposta a Incidentes (IR) ter a capacidade de analisar arquivos no sistema de arquivos. Às vezes, esses arquivos estão bloqueados pelo sistema operacional (SO) porque estão em uso, o que é particularmente frustrante com logs de eventos e hive de registro. O TScopy permite que o usuário, que está executando com privilégios de administrador, acesse arquivos bloqueados analisando sua localização bruta no sistema de arquivos e copiando-os sem pedir ao SO.
Existem outras ferramentas que realizam funções semelhantes, como o RawCopy, que usamos e é a base para esta ferramenta. No entanto, existem algumas desvantagens no RawCopy que nos levaram a desenvolver o TScopy, incluindo desempenho, tamanho e a capacidade de incorporá-lo em outras ferramentas.
Este blog tem como objetivo apresentar o TScopy, mas também pedir assistência. Como em todo desenvolvimento de software, quanto mais uma ferramenta é usada, mais casos extremos podem ser encontrados. Pedimos que as pessoas testem a ferramenta e relatem quaisquer bugs.
O TScopy é um script Python usado para analisar o arquivo $MFT do NTFS para localizar e copiar arquivos específicos. Ao analisar a Tabela de Arquivos Mestre (MFT), o script ignora os bloqueios do sistema operacional em arquivos. O script foi originalmente baseado no trabalho do RawCopy. O RawCopy é escrito em AutoIT e é difícil de modificar para nossos propósitos. A decisão de portar o RawCopy para Python foi tomada devido à necessidade de incorporar essa funcionalidade nativamente em nosso conjunto de ferramentas.
O TScopy foi projetado para ser executado como um programa independente ou incluído como um módulo Python. A implementação em Python faz uso das ferramentas python-ntfs encontradas em https://github.com/williballenthin/python-ntfs. O TScopy foi construído sobre a funcionalidade básica do python-ntfs para isolar a localização de cada arquivo do disco bruto.
O TScopy é escrito em Python e organizado em classes para torná-lo mais fácil de manter e legível do que o AutoIT. O AutoIT pode ser sinalizado como malicioso por software antivírus ou de detecção porque alguns malwares utilizaram seu potencial.
A principal diferença entre o TScopy e o RawCopy é a capacidade de copiar vários arquivos por execução e armazenar em cache a estrutura de arquivos. Conforme mostrado na imagem abaixo, o TScopy tem opções para baixar um único arquivo, vários arquivos delimitados por vírgula, o conteúdo de um diretório, caminhos com curingas (arquivos ou diretórios individuais) e diretórios recursivos.
O TScopy armazena em cache a localização de cada diretório e arquivo à medida que itera o caminho completo do arquivo alvo. Em seguida, usa esse cache para otimizar a busca por outros arquivos, garantindo que cópias futuras de arquivos sejam realizadas muito mais rapidamente. Esta é uma vantagem significativa sobre o RawCopy, que itera sobre todo o caminho para cada arquivo.
.\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.
Há uma opção oculta '--debug', que habilita a saída de depuração.
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM -o e:\outputdir
Copia o registro SYSTEM para e:\outputdir O novo arquivo será localizado em e:\outputdir\windows\system32\config\SYSTEM
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM -o e:\outputdir -i
Copia o registro SYSTEM para e:\outputdir, mas ignora quaisquer arquivos em cache anteriores e não salva o cache atual no disco
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM,c:\windows\system32\config\SOFTWARE -o e:\outputdir
Copia os registros SYSTEM e SOFTWARE para e:\outputdir
TScopy_x64.exe -f c:\windows\system32\config\ -o e:\outputdir
Copia o conteúdo do diretório config para e:\outputdir
TScopy_x64.exe -r -f c:\windows\system32\config\ -o e:\outputdir
Copia recursivamente o conteúdo do diretório config para e:\outputdir
TScopy_x64.exe -f c:\users\*\ntuser.dat -o e:\outputdir
Copia o arquivo NTUSER.DAT de cada usuário para e:\outputdir
TScopy_x64.exe -f c:\users\*\ntuser.dat* -o e:\outputdir
Para cada usuário, copia todos os arquivos que começam com NTUSER.DAT para e:\outputdi
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 usuário, copia todas as listas de saltos (jumplists), hives de registro e comandos do histórico do PowerShell para e:\outputdi
Por favor, relate bugs na seção de issues da página do GitHub.