mcpField
A
analyzing-mft-for-deleted-file-recovery

analyzing-mft-for-deleted-file-recovery

github.com/mukul975セキュリティ35.2k327 回インストール8 週間前に更新
リポジトリ

analyzing-mft-for-deleted-file-recovery について

NTFS の MFT データを調べるデジタルフォレンジック分析者向けガイドです。既存の解析ツールを用いた削除ファイルの証拠調査、タイムライン再構成、関連アーティファクトの照合を扱います。

主な機能

  1. 01MFT レコードと属性の解析
  2. 02USN ジャーナルと $LogFile の調査
  3. 03MFT スラック領域の分析
  4. 04ごみ箱とボリュームシャドウコピーの照合
  5. 05タイムスタンプ改ざんの検出

活用シーン

  1. 01削除ファイルのメタデータ復元
  2. 02ファイル操作タイムラインの再構成
  3. 03タイムスタンプ改ざんの調査
  4. 04ファイル内容のカービングに向けた手掛かりの特定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill analyzing-mft-for-deleted-file-recovery

インストール後、Claude Code で/analyzing-mft-for-deleted-file-recoveryを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE
assets/
template.md
references/
api-reference.md
standards.md
workflows.md
scripts/
agent.py
process.py

詳細

削除ファイルの復元に向けた MFT の分析

概要

NTFS マスター ファイル テーブル($MFT)は、NTFS ボリューム上のすべてのファイルとディレクトリの中核となるメタデータリポジトリです。各ファイルは、少なくとも 1 つの 1024 バイトの MFT レコードで表され、$STANDARD_INFORMATION(タイムスタンプ、アクセス許可)、$FILE_NAME(名前、親ディレクトリ、タイムスタンプ)、$DATA(ファイルの内容またはクラスタランポインター)などの属性を含みます。ファイルが削除されると、その MFT レコードは非アクティブとしてマークされます(InUse フラグがクリアされます)が、新しいファイルによってエントリが再割り当てされるまでメタデータは残ります。この永続性により、MFT 分析は削除されたファイルの証拠を復元し、ファイルシステムのタイムラインを再構築し、タイムスタンプ改ざんなどのアンチフォレンジック活動を検出するための主要な手法となっています。

使用するタイミング

  • 削除ファイルの復元に向けて MFT の分析が必要なセキュリティインシデントを調査するとき
  • この領域の検出ルールや脅威ハンティングクエリを作成するとき
  • SOC アナリストがこの種の分析に構造化された手順を必要とするとき
  • 関連する攻撃手法に対するセキュリティ監視のカバレッジを検証するとき

前提条件

  • フォレンジックディスクイメージ(E01、raw/dd、VMDK、または VHDX 形式)
  • MFTECmd(Eric Zimmerman)または analyzeMFT(Python ベース)
  • イメージのマウントに使用する FTK Imager、Arsenal Image Mounter、または同等のツール
  • CSV 分析用の Timeline Explorer または Excel
  • カスタム分析スクリプト用の Python 3.8 以降
  • NTFS ファイルシステムの内部構造に関する知識

MFT の構造とレコードレイアウト

MFT レコードヘッダー

各 MFT レコードはシグネチャ「FILE」(0x46494C45)で始まり、以下が含まれます。

オフセットサイズフィールド
0x004 バイトシグネチャ(「FILE」)
0x042 バイト更新シーケンスへのオフセット
0x062 バイト更新シーケンスのサイズ
0x088 バイト$LogFile シーケンス番号
0x102 バイトシーケンス番号
0x122 バイトハードリンク数
0x142 バイト最初の属性へのオフセット
0x162 バイトフラグ(0x01 = InUse、0x02 = ディレクトリ)
0x184 バイトMFT レコードの使用サイズ
0x1C4 バイトMFT レコードの割り当てサイズ
0x208 バイトベースファイルレコード参照
0x282 バイト次の属性 ID
主な MFT 属性
タイプ ID名前説明
0x10$STANDARD_INFORMATIONタイムスタンプ、フラグ、所有者 ID、セキュリティ ID
0x30$FILE_NAMEファイル名、親 MFT 参照、タイムスタンプ
0x40$OBJECT_IDファイル固有の GUID
0x50$SECURITY_DESCRIPTORACL アクセス許可
0x60$VOLUME_NAMEボリュームラベル(ボリュームメタデータファイルのみ)
0x80$DATAファイルの内容(700 バイト未満の場合は常駐)またはクラスタランリスト
0x90$INDEX_ROOTディレクトリ用 B ツリーインデックスルート
0xA0$INDEX_ALLOCATION大規模なディレクトリ用の B ツリーインデックスエントリ
0xB0$BITMAPインデックスまたは MFT 用の割り当てビットマップ

削除ファイルの復元手法

手法 1:MFTECmd による MFT レコード分析
# Extract $MFT from forensic image using KAPE or FTK Imager
# Parse the $MFT with MFTECmd
MFTECmd.exe -f "C:\Evidence\$MFT" --csv C:\Output --csvf mft_full.csv

# Filter for deleted files (InUse = FALSE) in Timeline Explorer
# Look for entries where InUse column is False

CSV 出力で削除ファイルを特定する:

  • InUse = False は、削除または再割り当てされたレコードを示します
  • ParentPath は、削除前の元のファイルの場所を示します
  • FileSize は元のサイズを示します(引き続き復元できる場合があります)
  • $STANDARD_INFORMATION 属性と $FILE_NAME 属性のタイムスタンプは残ります
手法 2:USN ジャーナル($UsnJrnl:$J)の分析

USN ジャーナルには、作成、削除、名前変更、データ変更のイベントなど、NTFS ボリューム上のファイルに対するすべての変更が記録されます。

# Parse USN Journal with MFTECmd
MFTECmd.exe -f "C:\Evidence\$J" --csv C:\Output --csvf usn_journal.csv

# Key USN reason codes for deletion evidence:
# USN_REASON_FILE_DELETE     = 0x00000200
# USN_REASON_CLOSE           = 0x80000000
# USN_REASON_RENAME_OLD_NAME = 0x00001000
# USN_REASON_RENAME_NEW_NAME = 0x00002000
手法 3:$LogFile トランザクション分析

$LogFile には NTFS のトランザクションレコードが保存されており、USN ジャーナルが循環した後でもファイル操作を明らかにできる場合があります。

# Parse $LogFile with LogFileParser
LogFileParser.exe -l "C:\Evidence\$LogFile" -o C:\Output

# Look for REDO and UNDO operations indicating file deletion:
# - DeallocateFileRecordSegment
# - DeleteAttribute
# - UpdateResidentValue (clearing InUse flag)
手法 4:MFT スラック領域の分析

MFT スラック領域は、MFT レコードの使用部分の終端から、割り当て済みの 1024 バイトの終端までの間に存在します。この領域には、以前のファイルレコードの残存データが含まれている可能性があります。

import struct

def parse_mft_slack(mft_path: str, output_path: str):
    """Extract and analyze MFT slack space for deleted file remnants."""
    with open(mft_path, "rb") as f:
        record_size = 1024
        record_num = 0
        slack_findings = []

        while True:
            record = f.read(record_size)
            if len(record) < record_size:
                break

            # Verify FILE signature
            if record[:4] != b"FILE":
                record_num += 1
                continue

            # Get used size from offset 0x18
            used_size = struct.unpack("<I", record[0x18:0x1C])[0]

            if used_size < record_size:
                slack = record[used_size:]
                # Check if slack contains readable strings or attribute headers
                if any(c > 0x20 and c < 0x7F for c in slack[:50]):
                    slack_findings.append({
                        "record": record_num,
                        "used_size": used_size,
                        "slack_size": record_size - used_size,
                        "slack_preview": slack[:100].hex()
                    })

            record_num += 1

    return slack_findings

補助アーティファクトとの相関分析

MFT と $Recycle.Bin の相互参照
# Parse Recycle Bin with RBCmd
RBCmd.exe -d "C:\Evidence\$Recycle.Bin" --csv C:\Output --csvf recycle_bin.csv

# Correlate: $I files contain original path and deletion timestamp
# Match MFT entry numbers from $R files back to original MFT records
MFT とボリュームシャドウコピーの相互参照
# List volume shadow copies
vssadmin list shadows

# Mount shadow copies and extract $MFT from each
# Compare MFT records across shadow copies to track file changes over time

フォレンジック上の価値

  • 削除されたファイルのメタデータ復元:元のファイル名、パス、サイズ、タイムスタンプ
  • タイムラインの再構築:ファイルの作成、変更、アクセス、削除イベント
  • タイムスタンプ改ざんの検出:$SI と $FN のタイムスタンプを比較
  • データカービングの指針:MFT のクラスタランからディスク上のファイルコンテンツを特定
  • アンチフォレンジックの検出:消去または改ざんされた MFT レコードを特定

参考資料

出力例

$ MFTECmd.exe -f "C:\Evidence\$MFT" --csv /analysis/mft_output

MFTECmd v1.2.2 - MFT Parser
==============================
Input: C:\Evidence\$MFT (Size: 384 MB)
Total MFT Entries: 395,264

Parsing MFT entries... Done (12.4 seconds)

--- Deleted File Recovery Summary ---
Total Entries:          395,264
Active Files:           245,832
Deleted Files:          149,432
  Recoverable:          87,234 (resident data or clusters not reallocated)
  Partially Recoverable: 31,456 (some clusters overwritten)
  Unrecoverable:        30,742 (all clusters reallocated)

--- Recently Deleted Files (Incident Window: 2024-01-15 to 2024-01-18) ---
MFT Entry | Filename                          | Path                               | Size      | Deleted (UTC)         | Recoverable
----------|-----------------------------------|------------------------------------|-----------|-----------------------|------------
148923    | exfil_tool.exe                    | C:\ProgramData\Updates\            | 1,258,496 | 2024-01-17 02:45:12   | YES
148924    | exfil_tool.log                    | C:\ProgramData\Updates\            | 45,312    | 2024-01-17 02:45:14   | YES
149001    | passwords.txt                     | C:\Users\jsmith\Desktop\           | 2,048     | 2024-01-17 02:50:33   | YES
149150    | scan_results.csv                  | C:\Users\jsmith\AppData\Local\Temp | 892,416   | 2024-01-17 03:00:01   | PARTIAL
149200    | mimikatz.exe                      | C:\Windows\Temp\                   | 1,250,816 | 2024-01-18 01:15:22   | YES
149201    | sekurlsa.log                      | C:\Windows\Temp\                   | 32,768    | 2024-01-18 01:15:25   | YES
149302    | .bash_history                     | C:\Users\jsmith\                   | 4,096     | 2024-01-18 03:00:00   | NO
149400    | ClearEventLogs.ps1                | C:\Windows\Temp\                   | 1,536     | 2024-01-18 03:01:12   | YES

--- $STANDARD_INFORMATION vs $FILE_NAME Timestamp Analysis (Timestomping Detection) ---
MFT Entry | Filename            | $SI Created          | $FN Created          | Delta     | Verdict
----------|---------------------|----------------------|----------------------|-----------|----------
148923    | exfil_tool.exe      | 2023-06-15 10:00:00  | 2024-01-15 14:34:02  | -214 days | TIMESTOMPED
149200    | mimikatz.exe        | 2022-01-01 00:00:00  | 2024-01-16 02:30:15  | -745 days | TIMESTOMPED

Recovered files exported to: /analysis/mft_output/recovered/
Full CSV report: /analysis/mft_output/mft_analysis.csv (395,264 rows)
Timeline CSV: /analysis/mft_output/mft_timeline.csv

コメント