← ブログに戻る

NTFS のアンチ フォレンジック: 攻撃者は MFT に何をするか、どう見抜くか

· 読了 2 分

結論: NTFS のアンチ フォレンジック手法は、ファイルの正体・操作時刻・存在そのものを隠すことを狙います。一般的な手法のどれもクリーンではありません — それぞれが $MFT$UsnJrnl$LogFile、または VSS スナップショットに異なる痕跡を残します。この記事は手法と、それを破る決め手となる痕跡をカタログ化します。

タイムストンピング

古典です。SetMACEtimestomp、組み込みの PowerShell ワンライナーなどのツールが SetFileTime を呼び出すか、$STANDARD_INFORMATION を直接書き換えて、ファイルを実際より古く・新しく見せます。

残るもの:

  • $STANDARD_INFORMATION$FILE_NAME のタイムスタンプが乖離する — SetFileTime は SI のみ更新します。MFT の 4 つのタイムスタンプ を参照。
  • 秒以下の精度がしばしばゼロ化される。通常の Windows 活動は端数秒を残しますが、多くのタイムストンピング ツールは秒に丸めます。
  • $STANDARD_INFORMATION作成 時刻が $FILE_NAME作成 時刻より古いのは不可能 — ファイルは名付けられる前に存在できません。

見抜き方: $MFT を解析し、SI と FN が数秒以上ズレているレコード、または SI が FN より前のレコードをフラグします。本サイトの ブラウザ パーサー はレコードごとに両方のタイムスタンプ セットを公開しています。

代替データ ストリーム (ADS)

NTFS はファイルが複数の $DATA 属性を持つことを許します。名前なしのものが「本物」のファイル、名前付き(file.txt:hidden)が 代替データ ストリーム で、エクスプローラからも dir からも見えず、ペイロードを隠すのに常用されます。

残るもの:

  • ADS は同じ MFT レコード内の単なる別の $DATA 属性です。属性ストリームを走査するパーサーはすべて列挙します。
  • ブラウザが自動で付ける Zone.Identifier ADS は、ダウンロードされたペイロード上にしばしば残り、ファイルがインターネット由来であること、どのセキュリティ ゾーンから来たかを証明します。

見抜き方: ライブ システムでは cmd.exe の dir /R が ADS を列挙します。Sysinternals の streams.exe も列挙します。MFT パーサーはレコードと並べて表示します。代替データ ストリーム を参照してください。

単一ファイルのワイピング

洗練されたワイパーはファイルのクラスタを上書きしてから MFT レコードを削除します。洗練されていないもの(del /f、既定設定の SDelete)はデータを上書きしますが、MFT レコードはそのまま残します。

残るもの:

  • $FILE_NAME$STANDARD_INFORMATION が無傷の削除済み MFT レコード — データが消えていても、名前とタイムスタンプは残ります。NTFS でファイルを削除したときに何が残るか を参照。
  • 元の作成と削除の $UsnJrnl レコードがしばしば残ります。
  • メタデータ操作についての $LogFile のエントリ。
  • ワイプ前の VSS スナップショットに、まだ完全なファイルが含まれている可能性。

見抜き方: 「ワイプ」されたファイルですら、名前、パス、タイムスタンプを $MFT に残します。VSS スナップショット(スナップショットと $MFT)と組み合わせれば、内容も復元できることがしばしばあります。

MFT レコード自体のワイピング

より積極的な攻撃者は、新しいファイルを書き込んでスロットを意図的に再利用し、削除レコードを上書きします。これは成功します — スロットは消えます — が、削除自体がイベントです。

残るもの:

  • レコードの シーケンス番号 がインクリメントされる。$UsnJrnl$LogFile から古いシーケンスへの参照は今や陳腐になり、スロットが再利用されたことを示します。
  • $UsnJrnl は依然として元の作成・削除 新ファイルの作成の両方を記録します。新ファイルが別の場所にあれば異なる親ディレクトリも記録されます。
  • 再利用前の $MFT のスナップショット コピーには元のレコードがまだ保持されています。

見抜き方: $UsnJrnl を現在の $MFT とクロス チェックします。対象レコードのシーケンス番号が $UsnJrnl エントリの参照より高い場合、再利用を示します。

$UsnJrnl の切り詰め

変更ジャーナルは有限です。騒がしい操作(大量のファイル書き込み)を行う攻撃者は、$UsnJrnl をラップさせて古いエントリを追い出せます。

残るもの:

  • $UsnJrnl の開始が $Max パラメータから想定されるよりも後なら、それは怪しい。
  • $LogFile は同じようにローテーションされず、$UsnJrnl を押し出した操作をしばしばまだ記録しています。
  • 騒がしい操作自体が数千の MFT レコードを残します — 見えます。

$UsnJrnl の削除

fsutil usn deletejournal /D C: はジャーナルを完全に削除します。再作成されたジャーナルは新しい USN カウンタから始まります。

残るもの:

  • 最初の USN が不自然に高い、または最初のレコードがインシデントの数時間・数分前にしかない $UsnJrnl
  • MFT レコードのシーケンス番号がインクリメントされた $Extend ディレクトリ エントリ。
  • 削除前の VSS スナップショットに完全なジャーナルが残っている。

システム ファイルへの偽装

マルウェアを svchost.exelsass.exe、その他なじみの Windows バイナリとして偽装します。厳密には MFT のアンチ フォレンジックではありませんが、実地で最もアナリストを欺くトリックです。

残るもの:

  • 親ディレクトリ参照が C:\Windows\System32 ではない $FILE_NAME
  • 正規バイナリの分布と一致しないサイズとエントロピーの $DATA 属性。
  • ダウンロードに由来する Zone.Identifier ADS。

ランサムウェアによる MFT 書き荒らし

一部のランサムウェア ファミリ(Petya、NotPetya、それ以来のいくつか)は、ボリュームをマウント不可にするため $MFT を意図的に破壊します。これは回避ではなく破壊です。

残るもの:

  • FILE であるべき場所に BAAD レコード。
  • ブート不能なシステム。しかしフォレンジック価値のあるイメージ — ボリュームを FILE レコードでシグネチャ スキャンすれば、テーブルの大半はまだ読めます。

詳細は MFT におけるランサムウェアのパターン を参照してください。

一般原則

NTFS におけるアンチ フォレンジック手法はいずれも 何らかの 痕跡を残します。理由は構造的です。$MFT$UsnJrnl$LogFile、VSS はそれぞれ同じ出来事の異なる視点を記録しており、それらのどれか 1 つを書き換えること自体がイベントで、他のものが記録します。4 つすべてを並べて辿るトリアージは、破ることが困難です。

外部リソース