
Python-Tool, das die NTFS $MFT parst, um während der Incident-Response gesperrte Dateien zu kopieren, indem es Betriebssystemsperren durch das Lesen von rohen Datenträgerpositionen umgeht. Unterstützt rekursives, Wildcard- und Multi-Datei-Kopieren mit Caching für die Leistung.

Aktualisiert 2022-03-31
Bei einer Incident-Response (IR)-Untersuchung ist es erforderlich, Dateien im Dateisystem analysieren zu können. Manchmal sind diese Dateien vom Betriebssystem (OS) gesperrt, weil sie verwendet werden, was besonders bei Ereignisprotokollen und Registry-Hives frustrierend ist. TScopy ermöglicht es dem Benutzer, der mit Administratorrechten arbeitet, auf gesperrte Dateien zuzugreifen, indem es ihren rohen Speicherort im Dateisystem analysiert und sie kopiert, ohne das Betriebssystem zu fragen.
Es gibt andere Tools, die ähnliche Funktionen ausführen, wie RawCopy, das wir verwendet haben und das die Grundlage für dieses Tool bildet. Allerdings gibt es einige Nachteile von RawCopy, die uns zur Entwicklung von TScopy bewogen haben, darunter Leistung, Größe und die Möglichkeit, es in andere Tools zu integrieren.
Dieser Blog soll TScopy vorstellen, aber auch um Hilfe bitten. Wie bei jeder Softwareentwicklung gilt: Je mehr ein Tool verwendet wird, desto mehr Randfälle können gefunden werden. Wir bitten die Leute, das Tool auszuprobieren und etwaige Fehler zu melden.
TScopy ist ein Python-Skript, das die NTFS-$MFT-Datei analysiert, um bestimmte Dateien zu lokalisieren und zu kopieren. Durch das Parsen der Master File Table (MFT) umgeht das Skript Betriebssystemsperren für Dateien. Das Skript basierte ursprünglich auf der Arbeit von RawCopy. RawCopy ist in AutoIT geschrieben und für unsere Zwecke schwer zu modifizieren. Die Entscheidung, RawCopy nach Python zu portieren, wurde getroffen, weil diese Funktionalität nativ in unser Toolset integriert werden musste.
TScopy ist so konzipiert, dass es als eigenständiges Programm oder als Python-Modul eingebunden werden kann. Die Python-Implementierung nutzt die python-ntfs-Tools unter https://github.com/williballenthin/python-ntfs. TScopy baut auf der Basisfunktionalität von python-ntfs auf, um den Speicherort jeder Datei von der Rohfestplatte zu isolieren.
TScopy ist in Python geschrieben und in Klassen organisiert, um es wartbarer und lesbarer zu machen als AutoIT. AutoIT kann von Antiviren- oder Erkennungssoftware als bösartig eingestuft werden, da einige Malware sein Potenzial genutzt hat.
Der Hauptunterschied zwischen TScopy und RawCopy ist die Fähigkeit, mehrere Dateien pro Ausführung zu kopieren und die Dateistruktur zwischenzuspeichern. Wie im folgenden Bild gezeigt, bietet TScopy Optionen zum Herunterladen einer einzelnen Datei, mehrerer durch Komma getrennter Dateien, des Inhalts eines Verzeichnisses, mit Platzhaltern versehener Pfade (einzelne Dateien oder Verzeichnisse) und rekursiver Verzeichnisse.
TScopy speichert den Speicherort jedes Verzeichnisses und jeder Datei zwischen, während es den vollständigen Pfad der Zieldatei durchläuft. Es verwendet diesen Cache dann, um die Suche nach anderen Dateien zu optimieren, sodass zukünftige Dateikopien viel schneller ausgeführt werden. Dies ist ein wesentlicher Vorteil gegenüber RawCopy, das für jede Datei den gesamten Pfad durchläuft.
.\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.
Es gibt eine versteckte Option '--debug', die die Debug-Ausgabe aktiviert.
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM -o e:\outputdir
Kopiert die SYSTEM-Registrierungsdatei nach e:\outputdir Die neue Datei befindet sich unter e:\outputdir\windows\system32\config\SYSTEM
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM -o e:\outputdir -i
Kopiert die SYSTEM-Registrierung nach e:\outputdir, ignoriert jedoch alle zuvor zwischengespeicherten Dateien und speichert den aktuellen Cache nicht auf der Festplatte
TScopy_x64.exe -f c:\windows\system32\config\SYSTEM,c:\windows\system32\config\SOFTWARE -o e:\outputdir
Kopiert die SYSTEM- und SOFTWARE-Registrierungen nach e:\outputdir
TScopy_x64.exe -f c:\windows\system32\config\ -o e:\outputdir
Kopiert den Inhalt des Verzeichnisses config nach e:\outputdir
TScopy_x64.exe -r -f c:\windows\system32\config\ -o e:\outputdir
Kopiert den Inhalt des Verzeichnisses config rekursiv nach e:\outputdir
TScopy_x64.exe -f c:\users\*\ntuser.dat -o e:\outputdir
Kopiert die NTUSER.DAT-Datei jedes Benutzers nach e:\outputdir
TScopy_x64.exe -f c:\users\*\ntuser.dat* -o e:\outputdir
Kopiert für jeden Benutzer alle Dateien, die mit NTUSER.DAT beginnen, nach 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
Kopiert für jeden Benutzer alle Jumplists, Registrierungs-Hives und PowerShell-Verlaufsbefehle nach e:\outputdi
Bitte melden Sie Fehler im Issues-Bereich der GitHub-Seite.