
Инструмент на Python, который анализирует NTFS $MFT для копирования заблокированных файлов во время реагирования на инциденты, обходя блокировки ОС путем чтения сырых дисковых расположений. Поддерживает рекурсивное, шаблонное и множественное копирование файлов с кэшированием для производительности.

Обновлено 2022-03-31
Во время расследования инцидентов (IR) часто требуется возможность анализировать файлы в файловой системе. Иногда эти файлы заблокированы операционной системой (ОС), поскольку используются, что особенно раздражает в случае журналов событий и кустов реестра. TScopy позволяет пользователю, работающему с правами администратора, получать доступ к заблокированным файлам, извлекая их сырое расположение в файловой системе и копируя без обращения к ОС.
Существуют и другие инструменты, выполняющие аналогичные функции, например RawCopy, который мы использовали и который стал основой для этого инструмента. Однако у RawCopy есть некоторые недостатки, побудившие нас разработать TScopy, включая производительность, размер и возможность встраивания в другие инструменты.
Этот блог предназначен для знакомства с TScopy, но также и для просьбы о помощи. Как и в любой разработке ПО, чем больше инструмент используется, тем больше крайних случаев можно обнаружить. Мы просим людей опробовать инструмент и сообщать о любых ошибках.
TScopy — это скрипт на Python, используемый для парсинга файла $MFT файловой системы NTFS с целью поиска и копирования определённых файлов. Анализируя Master File Table (MFT), скрипт обходит блокировки операционной системы на файлы. Изначально скрипт был основан на работе RawCopy. RawCopy написан на AutoIT и его сложно модифицировать для наших целей. Решение портировать RawCopy на Python было принято из-за необходимости встроить эту функциональность нативно в наш набор инструментов.
TScopy предназначен для запуска как отдельная программа или для включения в качестве модуля Python. Реализация на Python использует инструменты python-ntfs, доступные по адресу https://github.com/williballenthin/python-ntfs. TScopy построен на базовой функциональности python-ntfs для изоляции расположения каждого файла с сырого диска.
TScopy написан на Python и организован в классы, что делает его более поддерживаемым и читаемым по сравнению с AutoIT. AutoIT может быть помечен антивирусом или детектирующим ПО как вредоносный, поскольку некоторые вредоносные программы использовали его возможности.
Основное различие между TScopy и RawCopy — это возможность копировать несколько файлов за один запуск и кэширование структуры файлов. Как показано на изображении ниже, TScopy имеет опции для загрузки одного файла, нескольких файлов, разделённых запятыми, содержимого каталога, путей с подстановочными знаками (отдельные файлы или каталоги) и рекурсивных каталогов.
TScopy кэширует расположение каждого каталога и файла по мере итерации полного пути целевого файла. Затем он использует этот кэш для оптимизации поиска других файлов, что обеспечивает гораздо более быстрое выполнение последующих копий. Это значительное преимущество перед RawCopy, который для каждого файла итерирует весь путь.
.\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.
Существует скрытая опция --debug, которая включает отладочный вывод.
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM -o e:\outputdir
Копирует куст реестра SYSTEM в e:\outputdir Новый файл будет расположен по адресу e:\outputdir\windows\system32\config\SYSTEM
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM -o e:\outputdir -i
Копирует куст реестра SYSTEM в e:\outputdir, но игнорирует все предыдущие кэшированные файлы и не сохраняет текущий кэш на диск
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM,c:\windows\system32\config\SOFTWARE -o e:\outputdir
Копирует кусты реестра SYSTEM и SOFTWARE в e:\outputdir
TScopy_x64.exe -f c:\windows\system32\config\ -o e:\outputdir
Копирует содержимое каталога config в e:\outputdir
TScopy_x64.exe -r -f c:\windows\system32\config\ -o e:\outputdir
Рекурсивно копирует содержимое каталога config в e:\outputdir
TScopy_x64.exe -f c:\users\*\ntuser.dat -o e:\outputdir
Копирует файл NTUSER.DAT каждого пользователя в e:\outputdir
TScopy_x64.exe -f c:\users\*\ntuser.dat* -o e:\outputdir
Для каждого пользователя копирует все файлы, начинающиеся с NTUSER.DAT, в 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
Для каждого пользователя копирует все jumplists, кусты реестра и историю команд PowerShell в e:\outputdir
Пожалуйста, сообщайте об ошибках в разделе Issues на странице GitHub.