← ブログに戻る

実際に使い物になる MFT パーサ:MFTECmd、omerbenamram/mft、そしてブラウザパース

· 読了 2 分

MFT パーサとは、すべての NTFS ボリュームのルートにある Master File Table である $MFT を読み、その 1,024 バイトのレコードを、ピボットできる何かに変えるツールです。CSV、JSON、タイムライン、インタラクティブなテーブルです。GitHub にはおもちゃのような実装がいくつもあります。私が有料顧客の前に置くものは 3 つです。これがその選び方です。

MFTECmd(Eric Zimmerman)

MFTECmd はインシデントレスポンスにおける事実上の標準です。Windows 専用の .NET CLI、無料、$MFT$Boot$J$UsnJrnl 変更ジャーナルストリーム)、$SDS$Secure からのセキュリティディスクリプタ)、$LogFile を解析します。出力は CSV で、Eric Zimmerman ツールチェーンの残り(Timeline Explorer、KAPE、RECmd)がネイティブに消費する bodyfile 近接レイアウトです。

次のときに手を伸ばします。

  • Windows の分析ワークステーション上にいる。これは驚きの最も少ない経路です。
  • 解析済み出力を Timeline Explorer で開いてインタラクティブにピボットしたい。列マッピングはすでに正しい状態です。
  • KAPE を実行している。MFTECmd は MFT ターゲット用にバンドルされたパーサです。独自のパイプラインを書く必要がありません。
  • $LogFile の解析が必要。MFTECmd に並ぶものは他にありません。
  • 同じツールチェーンで $J の解析が必要。

.NET ランタイムなしの macOS または Linux にいる場合(はい、.NET 6+ はそこで動きますが、ほとんどのアナリストはセットアップしていません)、または別のプログラムにパースを埋め込みたい場合はスキップしてください。

コンパニオン GUI、MFT Explorer は、$MFT をツリービューでインタラクティブにブラウズします。ほとんどのアナリストは両方を使います。バッチパースには MFTECmd、特定のレコードを追跡する必要があるときには MFT Explorer。両者は同じパーサコードを共有しているので、一方で見えるものは他方と一致します。

唯一の運用上の不満。MFTECmd のデフォルトは拡張レコードも含む「すべて」のレコードを別々の行として出力します。ほとんどのワークフローでは、ベースレコードを統合したいでしょう。--bdl 系でフィルタし、最初の実行前にヘルプテキストを読んでください。

omerbenamram/mft(Rust crate + CLI)

omerbenamram/mft クレートはこのサイトが使うパーサライブラリです。Rust の依存関係(cargo add mft)とスタンドアロン CLI(mft_dump)として出荷されます。CLI は CSV または JSON を出力し、ライブラリは属性のウォークを含む完全なレコード構造をプログラム的使用のために公開します。

次のときに手を伸ばします。

  • MFT パースを大きなパイプラインに埋め込みたい。Rust、WebAssembly 経由、または Python(subprocess)や Go から FFI 経由で。
  • jq、OpenSearch、ClickHouse、カスタムデータベースに流すための JSON Lines 出力が欲しい。CLI は JSONL をストリームします。5 GB の $MFT をすべてメモリに読み込まずに jq に通せます。
  • Linux または macOS にいて .NET を入れたくない。
  • パーサが監査可能であってほしい。コードは小さく、慣用的な Rust で、テストコーパスはリポジトリ内にあります。

GUI を備えた turnkey なアナリスト体験とバンドルされたタイムラインツールが欲しいときはスキップしてください。具体的に $LogFile の解析が必要なときもスキップしてください。それは MFTECmd の領域です。

このサイトのブラウザパーサの背後で WebAssembly にコンパイルされて動作するのがこのクレートです。

analyzeMFT(Python)

analyzeMFT は古典的な純粋 Python パーサです。元々は David Kovar によるもので、現在も保守されています。CLI ファーストですが、インポート可能です。大入力に対しては MFTECmd より 10 から 50 倍遅いです(純粋 Python のシングルスレッドのため)が、ネイティブツールをインストールできないアドホックなスクリプトと一回限りのトリアージには適しています。

私は 2 つのケースで懐に保持しています。cargo を利用できないエアギャップな Linux 分析 VM と、MFTECmd CSV の列順を学ばずにすべてのレコードから特定のフィールドを抽出したいクイックワンライナーです。詳細とコードサンプルは Python で $MFT を解析する を参照してください。

ブラウザベースのパース(このサイト)

このサイトのパーサomerbenamram/mft クレートを取り、WebAssembly にコンパイルし、Web Worker で実行します。ページに $MFT をドロップすると、ページネーション付き、検索可能、ソート可能なテーブルにレコードが表示されます。アップロードはありません。バイトはブラウザのメモリに留まります。

次のときに手を伸ばします。

  • 何もインストールせずに $MFT をすばやく読みたい。若手アナリストのオンボーディング、NTFS 構造のデモンストレーション、迅速なセカンドオピニオン。
  • ポリシーがクラウドサービスへの証拠送信を禁止している。WebAssembly のパースはローカルで起こります。ファイルをドロップする前にネットワークを切断して検証できます。
  • フォレンジックツールチェーンをインストールしておらず、インストールするつもりもない同僚とトリアージビューを共有する必要がある。
  • NTFS 構造を教えており、学生がレコードをつついてレイアウトの更新を見られるインタラクティブなサンドボックスが欲しい。

激しく使用されたサーバーからの数ギガバイトの $MFT がある場合(インメモリモデルは線形にスケールします)、または広範な Eric Zimmerman パイプライン(Timeline Explorer の列マッピング)と統合する出力が必要な場合はスキップしてください。それらには MFTECmd が正解です。

Sleuth Kit、完全性のために言及

Sleuth Kit の fls -m -r -o <offset> image.dd は MFT を走査し、削除済みエントリを含む bodyfile を出力します。istat -o <offset> image.dd <inode> は単一のレコードを人間可読な形式で表示します。icat -o <offset> image.dd <inode> はファイルのデータを抽出します。

Sleuth Kit は、抽出された $MFT ではなく完全なディスクイメージから作業しているとき、クロスファイルシステムの証拠(同じイメージ内の FAT/exFAT/HFS+)を気にしているとき、または法廷での系譜が非の打ち所のないパーサが欲しいときの正解です。出力は MFTECmd ほど便利ではありませんが、ツーリングは 20 年間ピアレビューされています。

比較

| 機能 | MFTECmd | omerbenamram/mft | ブラウザパーサ | analyzeMFT | |---------|---------|------------------|----------------|------------| | プラットフォーム | Windows(.NET) | Linux / macOS / Windows / Wasm | 任意の最新ブラウザ | Python 3 のあるどこでも | | インストール | バイナリ 1 つ | cargo install またはリリースバイナリ | なし | pip install | | 出力 | CSV(Timeline Explorer スキーマ) | CSV / JSONL | インタラクティブテーブル + CSV エクスポート | CSV | | $UsnJrnl:$J | はい | いいえ(別途 omerbenamram/usn クレート) | ブラウザパーサは $J ビューにリンクします | いいえ | | $LogFile | はい | いいえ | いいえ | いいえ | | スクリプタブル | CLI のみ | ライブラリ + CLI | UI 駆動 | ライブラリ + CLI | | 速度(1 GB MFT) | 約 30 秒 | 約 20 秒 | 約 60 秒(UI オーバーヘッド) | 10〜20 分 | | プライバシー | ローカル | ローカル | ローカル(ネットワーク分離で検証可能) | ローカル |

1 つを選ぶ

Windows ワークステーションでの日常的な IR 業務では、MFTECmd。KAPE と Timeline Explorer に組み込まれます。最も驚きの少ない経路です。

多くのディスクを取り込み、Linux で動作させ、JSON が欲しいパイプラインには omerbenamram/mft。CLI は速く、ライブラリはクリーンです。

一回限りのトリアージ、敵対的なネットワーク状況、教室、フォレンジックマシンを持たない同僚向けには ブラウザパーサ

MFT が複数あるファイルシステムの 1 つにすぎないフル画像調査、または利便性より法的許容性の系譜が重要な場合には Sleuth Kit

これらは相補的です。経験豊富な検査担当者の多くは、その瞬間に合うものに手を伸ばします。唯一の正解はありません。

参考資料

  • Eric Zimmerman のツールインデックス。ericzimmerman.github.io。MFTECmd は数あるツールの 1 つで、そのエコシステム(RECmd、EZViewer、KAPE)が IR デフォルトたらしめています。
  • Sleuth Kit Wikiflsistaticat のドキュメントと NTFS の概念的なメモ。
  • omerbenamram/mft README とテストコーパス。パーサが正確に何を扱い何を扱わないかを理解したい場合に読む価値があります。

外部リソース