← ブログに戻る

ライブ Windows ホストから $MFT を壊さずに抽出する

· 読了 2 分

$MFT はあらゆる NTFS ボリュームの先頭に存在し、ボリュームがマウントされている限り Windows はそれに対する排他ロックを保持しています。xcopy は失敗します。Robocopy も失敗します。素朴な PowerShell の Copy-Item も失敗するか、特定の構成では見かけ上正しいサイズで内部的には壊れた切り詰めコピーを密かに生成します。生のボリュームを読み取り、ファイルシステムロックを回避し、$MFT をクラスタランから組み立てるツールが必要です。

実務上、私が信頼するオプションは 3 つあります。毎週見るライブホストのトリアージケースをカバーしています。

選択肢 1: KAPE、IR でのデフォルト

インシデントレスポンスを実施していて Windows ホスト上にいるなら、答えは MFT ターゲットを使った KAPE です。$MFT$MFTMirr$LogFile$UsnJrnl:$J$Boot$Secure:$SDS、および関連するファイルを一度のパスで取得し、収集されたファイルの元のタイムスタンプを保持し、分析に持ち運べるきれいなディレクトリツリーを書き出します。

kape.exe --tsource C: --target MFT --tdest C:\triage --vss

--vss は人が忘れがちなフラグです。これは、ソース上のあらゆる Volume Shadow Copy からも $MFT(およびターゲットの残り)を取得するよう KAPE に指示します。古いスナップショットはそれ自体で有用で、習慣として収集すべきです。それらをどう扱うかは Volume Shadow Copy と $MFT を参照してください。

KAPE はロックされたファイルの問題に対し、内部で RawCopy.exe の生ボリュームリーダーを使用して対処します。収集されたファイルは、フォレンジックイメージから得られるものとビット同一です。特別な理由がない限り、これを使ってください。

選択肢 2: FTK Imager、GUI のフォールバック

FTK Imager は依然として取得用の標準的な無料 GUI ツールです。KAPE がホストにない状況で、$MFT を一度だけ取得して終わりにしたいときに手を伸ばすものです。ワークフロー。

  1. FileAdd Evidence ItemPhysical Drive(リモート共有やマウントされたイメージで作業しているのでなければ Logical Drive は使わないでください)。
  2. ディスクを選択して、ボリュームを列挙させます。
  3. 左側のツリーで NTFS ボリュームのルートを展開します。$MFT$MFTMirr$LogFile$Volume$AttrDef$Bitmap ほかメタデータファイルは、エクスプローラが隠していてもそこに表示されます。
  4. $MFT を右クリック → Export Files。直ちに(SHA-256 で)ハッシュ化します。

FTK Imager は物理デバイスをマッピングし NTFS を自前で解析することでロックされたボリュームを読み取ります。エクスポートはディスク上の実際のファイルで、fixup 配列もそのままです。

同じワークフローは .dd.E01.AFF4 イメージを読み取れます。オフラインイメージがあるなら、それを証拠としてマウントし、同じエクスポート経路を使ってください。

選択肢 3: 何もインストールできないときの fsutil と raw read

KAPE や FTK Imager を投入できない硬化されたホスト上では、組み込みの fsutil コマンドが $MFT の所在を教えてくれます。

fsutil file queryextents C:\$Mft

出力は(Virtual Cluster Number、Logical Cluster Number、length)の三つ組のリストです。これをファイルに変換するには、各 LCN で生のボリュームを読み取り組み立てます。CreateFile(\\.\C:, GENERIC_READ) への P/Invoke を持つ PowerShell で実現できます。GitHub にある小さな PowerShell 生読み取りモジュールでも同様です。Joakim Schicht の RawCopy.exe(KAPE が内部で使うのと同じコード)が最もシンプルなスタンドアロンです。

これは構成要素であり、最終的な答えではありません。他のツールの導入をポリシーが禁止している場合に使ってください。

人が間違える点

Copy-Item -Force でコピーする。 時には成功してファイルを得られます。そのファイルは、Windows が開いているハンドルに対する通常の ReadFile 呼び出しに返したものであり、ほとんどのビルドでは実際の $MFT ではありません。fsutil file queryextents でサイズが一致することを必ず確認してください。

$MFTMirr とトランザクションログを忘れる。 $MFTMirr は 16 レコードの保険です。トランザクションログ($LogFile、および $Extend\$RmMetadata 配下のリソースごとの $TxfLog ファイル)は、取得の瞬間にまだ $MFT に到達していない可能性のある操作を保持しています。一緒に取得してください。KAPE は無料でこれをやってくれます。

USN ジャーナルを取得しない。 $UsnJrnl:$J はタイムライン再構築に必須です(ジャーナルとファイルテーブルの組み合わせ を参照)。それはローテーションするので、2 日待って取りに戻ると証拠を失います。最初の機会に取得してください。

VSS なしでライブシステムから収集する。 ライブの MFT はボリュームレベルでは整合しています(NTFS はジャーナル付き)が、ホストが忙しい場合、MFT が先に読まれたために $MFT$UsnJrnl が数十秒の差で食い違うことがあります。VSS スナップショットを取り、その両方をスナップショットから読み取ってください。スナップショットがそれらを凍結します。

収集されたファイルの間違ったタイムスタンプを信用する。 エクスポートされた $MFT の「modified」時刻は、収集ツールが設定したものです。バイトをハッシュ化し、別のログにハッシュと取得時刻を記録し、どこでもそのログを参照してください。

私が実際に使っている VSS ベースの取得

ライブホスト上で、きれいな時点の $MFT とジャーナルとログを取得したいときに使うスニペットです。

vssadmin create shadow /for=C:

出力から Shadow Copy Volume Name を読み取り、そのパスを好みのツールのソースとして使います。

robocopy "\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyN" "D:\triage" "$MFT" "$MFTMirr" "$LogFile" "$Extend\$UsnJrnl:$J" /R:1 /W:1

Robocopy は VSS デバイスパスから読み取れます。スナップショットがライブの排他ロックなしで別のボリュームとしてマウントされるためです。すべてが届いたらハッシュ化し、自分が削除すべきスナップショットなら削除して(vssadmin delete shadows /shadow={GUID})撤収します。

これは Windows に付属する以上のものをインストールせずにできる、私が知る最もきれいなライブ取得です。

ディスクイメージから読み取る

すでに .dd または .E01 イメージを持っているなら、ロックを完全に回避できます。イメージを読み取り専用でマウントするか(xmountewfmount、VSS 対応イメージには vshadowmount)、イメージを直接消費するパーサを使用します。$MFT は常にパーティションのオフセット 0 のブートセクタから LCN MftStartLcn に位置します。Sleuth Kit の icat -o <partition_offset> image.dd 0 がファイルを抽出します。Inode 0 は常に $MFT です。

分析前の検証

取得直後にファイルを(SHA-256 で)ハッシュ化します。解析前に再度ハッシュ化します。人が認めるよりも頻繁にミスマッチが発生します。通常は取得中のディスク負荷や、部分的な読み取りを暗黙のうちに再試行するコピーツールが原因です。

次に構造チェックを実行します。最初の 10 レコードを解析し、各レコードで FILE シグネチャを確認し、レコード 0 が自己参照する $DATA ランリストを持つ $MFT 自身であることを確認し、レコード 1 が $MFTMirr であることを確認し、レコード 5 が $INDEX_ROOT 属性を持つルートディレクトリであることを確認します。いずれかが失敗した場合、取得は不良であり、やり直す必要があります。MFTECmd と mft_dump はどちらも壊れたファイルに対して警告を投げます。それらを抑制しないでください。

参考資料

  • Eric Zimmerman, MFTECmd and KAPE。KapeFiles リポジトリは標準的な MFT ターゲットを定義しており、何が収集されるかを理解するために読む価値があります。
  • Joakim Schicht, RawCopy。ほとんどのライブ MFT 取得ツールの基盤となる生ボリュームリーダーです。
  • Microsoft, Volume Shadow Copy Service。クリーンな取得のために頼るスナップショットセマンティクスのリファレンスです。

外部リソース