← ブログに戻る

Windows システムに、ある時点でファイルが存在したことを証明する

· 読了 1 分

フォレンジック調査は、しばしば 1 つの問いに行き着きます — このファイルはこのコンピューターに存在したことがあるのか? 「いま、ディスクにあるか?」ではありません。それは dir の仕事です。難しい方の問いは、昨日・先週・去年にディスクにあったと示せるか、というものです。NTFS ボリュームでは、その答えとして最も強いのが $MFT です。

削除後も残るもの

NTFS でファイルを削除すると、その MFT レコードの「使用中」ビットは落ちますが、レコードの残りはそのままです。そのレコードが持つもの:

  • フル ファイル名($FILE_NAME 内)
  • 親ディレクトリへの参照
  • 4 つのタイムスタンプ(作成、更新、アクセス、MFT 更新) — SI と FN の両方に、2 セット
  • 論理サイズと物理サイズ
  • 小さなファイルなら、内容そのもの(常駐 $DATA)
  • 大きなファイルなら、データを保持していたクラスタの runlist

これらはすべて直接の証拠です。$FILE_NAME = secret-plan.docx、親ディレクトリ \Users\bob\Documents、SI 作成 2024-11-03T14:02:11Z を持つ削除済み MFT レコードは、その名前のファイルがその日にそのディレクトリに存在したことを — 今日 dir がどう見えるかに関わらず — 示しています。

証拠としての強さ

MFT レコードを強力なフォレンジック証拠にしている性質は 3 つあります。

  1. NTFS が自分で書き込む。通常の Windows ツールではユーザーが編集できません。捏造を主張するなら $MFT 全体の偽造が必要で、それは現実的に困難です。
  2. 8 つのタイムスタンプが相互チェックになる。改ざんはたいてい痕跡を残します — SI は変わったが FN はそのまま、というのはタイムストンピングの典型的な署名です。
  3. $UsnJrnl$LogFile が裏付ける$MFT が時刻 T に作成と言うなら、変更ジャーナルも同じ時刻にその作成イベントを記録しているはずです。食い違いそのものが証拠になります。

$MFT だけでは証明できないこと

$MFT は、ある瞬間にある特定のディレクトリにそのファイルが存在したことは証明します。次のことは証明しません。

  • 誰が作ったか、誰がアクセスしたか — Security イベント ログが必要
  • どのプログラムが生成したか — Prefetch と ShimCache が有用
  • 大きなファイルの内容が何だったか — データ クラスタを別途復元しない限り
  • ユーザーが実際に開いたかどうか — Jump List や LNK ファイルの方が役立つ

完全な答えは、たいてい $MFT と周辺のアーティファクトを統合して得られます。しかし $MFT こそが要石です — それが無ければ、他のピースには結びつけるべき土台がありません。

外部リソース