【入門編】 MFT(Master File Table)の構造解析と削除済みファイルの復元 – インシデントレスポンス & フォレンジック(DFIR)防御ガイド

こんにちは!セキュリティやインフラの現場に一歩足を踏み入れたばかりの新人IT担当者や、開発者の皆さん、日々の業務お疲れ様です。

突然ですが、皆さんはパソコンのデータを「ゴミ箱に入れたあと、ゴミ箱からも空にして完全削除した!」と思ったとき、そのデータは本当に地球上から消え去っていると思いますよね? 実は、デジタルフォレンジック(デジタル鑑識)の現場では、「完全に消したと思ったファイルが、実はごっそり残っている」なんてことは日常茶飯事なんです。

今回は、Windowsの心臓部であるファイルシステム「NTFS」の秘密の台帳、MFT(Master File Table)を覗き見しながら、攻撃者が隠した痕跡や削除されたファイルをどうやって見つけ出すのか、身近な例えを交えながら優しく紐解いていきたいと思います。一歩ずつ、リラックスして学んでいきましょう!

—

1. MFTってなに? 家の「戸籍謄本」に例えてみよう

パソコンの中には、写真、ドキュメント、怪しいプログラム(笑)など、数え切れないほどのファイルが保存されていますよね。これらを整理して管理しているのが「ファイルシステム」と呼ばれる仕組みで、Windowsの主流はNTFSという名前です。

このNTFSの中で、すべてのファイルの「住所」「大きさ」「名前」、そして「いつ作られたか」といった超重要データをすべて把握している巨大な台帳こそが、今回主役にするMFT(Master File Table)なんです。

これを身近なものに例えるなら、「マンションの全住民の戸籍謄本が1冊にまとまった管理台帳」のようなもの。
管理室にあるその台帳を開けば、「何号室に誰が住んでいて、いつ引っ越してきて、いつ退去したか」が一目でわかりますよね。MFTもこれと全く同じで、パソコン内のすべてのファイルに対して1つずつ「MFTエントリ(1行分のデータ)」という専用の部屋(サイズは基本1,000バイト=1KB)が割り当てられているんです。

攻撃者はなぜMFTを狙うのか?

悪いことを企む攻撃者(ハッカー)は、侵入した痕跡を消そうとして、デスクトップ上のログファイルや怪しいツールを「削除」してゴミ箱を空にします。

しかし、先ほどのマンションの例で考えてみてください。住人が夜逃げしたとき、部屋の中を綺麗に掃除して鍵を閉めても、「管理台帳のその部屋のページ」自体が消えるわけではありませんよね? 「退去済み」のハンコが押されるか、名前が線で消されるだけです。
実は、ファイルを削除しても、MFTの中にあるそのファイルの「戸籍(エントリ)」はそのまま残ってしまうことが多いのです。攻撃者がここに気づいていないと、フォレンジック調査員に尻尾を完全に掴まれてしまうというわけですね。

—

2. MFTエントリの構造と「削除」のメカニズム

では、もう少しだけ踏み込んで、MFTエントリの中身を見てみましょう。
MFTの1行(1エントリ)は、いくつかの「属性(Attribute)」と呼ばれるパーツに分かれています。

  • $STANDARD_INFORMATION: タイムスタンプ(作成日時、更新日時など)やファイルの権限が入っているエリア。
  • $FILE_NAME: ファイルの名前や、親フォルダの場所が入っているエリア。
  • $DATA: ファイルの「中身(本体)」が入っているエリア。

ここで面白い(そしてフォレンジック調査員にとって美味しい)ポイントがあります。
ファイルが小さければ(だいたい700バイト以下)、$DATAエリアのなかにファイルの中身そのものが直接書き込まれてしまうのです。これを「レジデント・ファイル(Resident File)」と呼びます。

ファイルを削除すると何が起きる?

あなたがファイルを「削除」すると、Windowsは次のようなお仕事を行います。

1. MFTエントリの先頭にある「ヘッダー情報(フラグ)」を書き換え、「このエントリは現在使われていません(未使用)」という状態(フラグの変更)にする。
2. ファイルの「中身」が置いてあったハードディスク上のエリア(クラスタ)を「次の書き込みに使っていいよ」というフリースペースに解放する。

お気づきでしょうか? ファイル名やタイムスタンプ、運が良ければファイルの中身そのものが、MFTのエントリの中にそのまま残されているのです! 新しいデータが上書き(オーバー escribir)されるまでの間は、消されたファイルはタイムカプセルのように眠り続けています。

—

3. 実践! PythonでMFTの削除痕跡を暴いてみよう

「理屈は分かったけど、実際にどうやって見るの?」という方のために、MFTの構造を解析し、削除されたファイルの痕跡を見つけるためのシンプルなPythonスクリプトの概念を見てみましょう。

実際のフォレンジック現場では専用の有料ツール(EnCaseやFTKなど)を使いますが、仕組みを理解するために手製のスクリプトをイメージしてみます。

# -*- coding: utf-8 -*-
"""
MFTエントリのヘッダーを読み取り、削除されたファイル(未使用フラグ)を
簡易的に検知するための概念コードです。
※実際の物理ドライブを読み込むには管理者権限と生バイト処理が必要です。
"""

def parse_mft_entry(entry_bytes):
    """
    MFTエントリ(通常1024バイト)の先頭を解析する関数
    """
    # 先頭の4バイトはマジックナンバー "FILE" ('F', 'I', 'L', 'E') である必要がある
    magic_number = entry_bytes[0:4].decode('ascii', errors='ignore')
    if magic_number != "FILE":
        return {"status": "Invalid", "message": "有効なMFTエントリではありません"}

    # 22バイト目〜23バイト目はフラグ領域
    # 0x01: ファイルが使用中, 0x00: ファイルが削除済み(未使用)
    flags = entry_bytes[22]
    
    is_allocated = (flags & 0x01) != 0
    
    if is_allocated:
        status_str = "使用中(Active)"
    else:
        status_str = "削除済み(Deleted / Unallocated) - 復元可能性あり!"

    # タイムスタンプやファイル名の抽出処理がここに続く...
    
    return {
        "status": status_str,
        "raw_flags": hex(flags)
    }

# --- 疑似的なMFTエントリデータのテスト ---
# 'FILE'マジックナンバーで始まり、フラグが 0x00(削除済み)のダミーデータ
dummy_deleted_mft_entry = b'FILE\x30\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

result = parse_mft_entry(dummy_deleted_mft_entry)
print(f"MFT解析結果: {result['status']}")
print(f"フラグの値: {result['raw_flags']}")

このコードのように、MFTの先頭にある数バイトのフラグをチェックするだけで、「あ、このエントリは昔使われていたけれど、今は削除されているな」と瞬時に見破ることができるのです。

—

4. 攻撃者がよくやる「証拠隠滅」の手口と、その裏をかく方法

サイバー攻撃者は非常に狡猾です。彼らもフォレンジック調査員がMFTを見ることを知っているので、次のような「証拠隠滅」を試みてきます。

1. ファイルスタンプの改ざん(タイムスタンプ・マヌーバリング)
攻撃者は、自分が侵入した時間やファイルをいじった痕跡を隠すために、タイムスタンプを過去の適当な日時に書き換えようとします。
2. ツールの完全削除とゼロ埋め(ワイプ)
専用のシュレッダーソフトを使って、MFTのエントリやデータ領域を 0x00 やランダムなデータで上書きし、復元不能にしようとします。

でも、セキュリティアナリストはここを見る!

攻撃者がどれだけ上手にタイムスタンプを書き換えても、MFTの構造には「隠しきれない矛盾」が生まれやすいです。

例えば、NTFSには $STANDARD_INFORMATION と $FILE_NAME の両方にタイムスタンプが記録されます。OSがファイルを普通に作成・更新した場合は、これらが綺麗に連動して更新されます。しかし、攻撃者が適当なツールで表面上の時間だけを書き換えると、この2つの場所にあるタイムスタンプに微妙なズレや不整合が生じるのです。

「あれ? ファイルの作成日時は去年の10月になっているのに、ファイル名の記録にあるタイムスタンプは昨日の夜になっているぞ……? おかしいな」

こうした小さな違和感(インシデントの兆候)を見逃さずにつなぎ合わせるのが、私たちDFIRアナリストの腕の見せ所というわけですね。

—

まとめ

今回は、MFTの構造と削除済みファイルの復元、そして攻撃者の隠蔽工作を見破るヒントについてお伝えしました。

  • MFTはパソコンの「戸籍謄本台帳」のようなもの。
  • ファイルを削除しても、MFTのエントリやフラグ、小さなファイルの中身はしばらく残っていることが多い。
  • 攻撃者が痕跡を消そうとしても、タイムスタンプの不整合やフラグの矛盾から、プロの目にはすべてお見通しになる。

「データを消したから安心」というのは、あくまで表面上の話。セキュリティの世界では、すべての行動にデジタルな足跡(ログやメタデータ)がしっかりと刻まれています。

最初は難しい用語が多くて面食らうかもしれませんが、一歩ずつ仕組みを紐解いていけば、まるで推理小説のようにサイバー攻撃の全貌がクリアに見えてきてとてもワクワクする分野です。
ぜひ今回の解説を参考に、日々のインフラ管理やセキュリティ学習を楽しんでみてくださいね! それではまた次回の記事でお会いしましょう!

コメント

タイトルとURLをコピーしました