MFT アーティファクト

fteのMFTタブではNTFS内の$MFTファイルを参照して各ファイル/フォルダのタイムスタンプをパースします。

MFT Big Picture

MFTエントリ

NTFSの先頭には$Bootファイルがあり、1クラスタのセクタ数や$MFTファイルの開始位置などの情報が格納されています。$MFTファイルは固定サイズのエントリで構成されており、原則1エントリで1つのファイル、フォルダ(以降オブジェクトと表現)のメタデータを管理します。

各エントリの先頭は必ずシグネチャ"FILE"ではじまるヘッダ領域があり、その中にリンク数、フラグ(ファイル/フォルダ/未使用)、IDなどの情報が含まれます。ヘッダの後は属性情報で構成されており、様々な属性によって構造は様々です。

通常のオブジェクトに相当するエントリは、必ず$STANDARD_INFORMATION属性($SI)と$FILE_NAME属性($FN)を持っています。オブジェクトによっては1つのエントリで2つ以上の$FNを持ちます。これはDOS名前空間に収まらない(名前が8文字を超える、拡張子が3文字を超える、記号を含む、など)場合や、そのオブジェクトに対するハードリンクが作成された場合です。

$SI, $FNのタイムスタンプ

$SIと$FNのどちらの属性も、上図に示すように4種類のタイムスタンプを保持しています。Windowsでは通常$SI内のタイムスタンプが参照、更新等の管理対象であり、$FNのタイムスタンプの定義については不明です。

また、Windows Vista以上ではデフォルトで「最終アクセス日時(atime)は更新しない」というレジストリ値(NtfsDisableLastAccessUpdate)が有効になっているため、atimeは本来の意味合いとは異なるタイムスタンプとなります。

NtfsDisableLastAccessUpdate
http://technet.microsoft.com/ja-jp/library/cc758569(v=ws.10).aspx

以下の表はWindows 7で$SI/$FNのタイムスタンプの挙動を調べた結果です。

タイムスタンプの更新タイミング(Windows 7)

  $SI crtime $SI mtime $SI ctime $SI atime $FN crtime $FN mtime $FN ctime $FN atime
作成 x x x x x x x x
参照     x1          
更新   x x x1 x3 x1 x1 x1
ドライブ内移動     x   x2 x2 x2 x2
ドライブ間移動 x1   x1 x x x x x
コピー x   x x x x x x
削除                
  • x - 処理時点に更新
  • x1 - 特定の条件/方法によって更新
  • x2 - 対応する$SIのタイムスタンプをセット
  • x3 - 特定の条件/方法によって対応する$SIのタイムスタンプをセット

検証の結果、atimeは他の3種類のタイムスタンプと同じタイミングで更新されることがあり、$FNのタイムスタンプは4種類ともに同じ値で更新されることがある、一部の処理によってその時点で$SIが持っているタイムスタンプを引き継ぐ、などがわかります。

fteの処理内容

fteのMFTタブで、Drive項目にNTFSボリュームを指定して実行するかファイル/フォルダをドラッグ&ドロップすると、パースして結果を表示します。以下が実行結果の例です。

fte MFT

出力する項目の内容は以下の通りです。

  • name - ファイル名
  • fixup - シーケンス値(エントリの更新回数に相当)
  • id, pid - MFT ID、 親フォルダのMFT ID
  • flag - フラグ(File: ファイル, Folder: フォルダ, [D]File: 削除ファイル, [D]Folder削除フォルダ)
  • nspace - ファイル名の名前空間(POSIX, DOS, Win32, Win32/DOS)
  • links -リンク数
  • crtime, mtime, ctime, atime - $SIのタイムスタンプ(作成、更新、エントリ更新、アクセス日時)
  • crtime(FN), mtime(FN), ctime(FN), atime(FN) $FNのタイムスタンプ(作成、更新、エントリ更新、アクセス日時)
  • remark - $SI, $FNの8タイムスタンプのソート(昇順)

fteはエントリ内に複数の$FNがある場合、$FNの数分だけ結果を別々に出力します。従ってfteの結果に同じIDの行が複数あることがあります。ただし例外として、エントリ内の$FNが2つでそれらがDOSとWin32、かつタイムスタンプが同値であった場合は、結果を2行出力することは冗長であるため、nspace項目を"DOS, Win32"として1行にまとめます。

remarks項目は$SI, $FNの計8つのタイムスタンプを古い順に並ベた結果を表示しています。

タグ