
Pythonツールで、インシデント対応時にロックされたファイルをコピーするためにNTFS $MFTを解析し、生のディスク位置を読み取ることでOSのロックを回避します。再帰的、ワイルドカード、複数ファイルのコピーをサポートし、パフォーマンス向上のためのキャッシング機能を備えています。

更新日 2022-03-31
インシデントレスポンス(IR)対応では、ファイルシステム上のファイルを分析できることが求められます。これらのファイルは、使用中のためオペレーティングシステム(OS)によってロックされている場合があり、特にイベントログやレジストリハイブで問題となります。TScopy を使用すると、管理者権限で実行しているユーザーが、ファイルのファイルシステム上の生の場所を解析し、OS に問い合わせずにコピーすることで、ロックされたファイルにアクセスできます。
同様の機能を提供するツールは他にも存在します。例えば RawCopy は以前から使用しており、本ツールの基盤となっています。しかし、RawCopy にはパフォーマンス、サイズ、他のツールへの組み込みの難しさなど、いくつかの欠点があり、TScopy の開発に至りました。
このブログでは TScopy を紹介するとともに、協力をお願いします。ソフトウェア開発全般に言えることですが、ツールが多く使われるほど、より多くのエッジケースが見つかります。ぜひツールをお試しいただき、バグを報告してください。
TScopy は、NTFS $MFT ファイルを解析して特定のファイルの位置を特定し、コピーするための Python スクリプトです。マスターファイルテーブル(MFT)を解析することで、OS によるファイルのロックを迂回します。このスクリプトは元々 RawCopy の成果に基づいています。RawCopy は AutoIT で書かれており、目的に合わせて修正するのが困難でした。TScopy を Python に移植したのは、この機能をネイティブにツールセットに組み込む必要があったためです。
TScopy はスタンドアロンプログラムとして実行することも、Python モジュールとして組み込むこともできます。Python 実装では、https://github.com/williballenthin/python-ntfs にある python-ntfs ツールを利用しています。TScopy は python-ntfs の基本機能を拡張し、各ファイルの生のディスク上の位置を特定します。
TScopy は Python で書かれており、クラスに整理されているため、AutoIT よりも保守性と可読性に優れています。AutoIT はマルウェアに悪用される可能性があるため、アンチウイルスソフトや検出ソフトウェアによって悪意のあるものとしてフラグが立てられることがあります。
TScopy と RawCopy の最大の違いは、1回の実行で複数のファイルをコピーできることと、ファイル構造をキャッシュできることです。下の画像に示すように、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
各ユーザーについて、すべてのジャンプリスト、レジストリハイブ、PowerShell 履歴コマンドを e:\outputdir にコピーします。
バグは GitHub ページの Issues セクションに報告してください。