NTFS で削除されたファイルの回復は、2 つのタイマーと 1 つの短い規則に集約されます。タイマー:MFT レコードスロットが再利用されるまでの時間と、データクラスタが上書きされるまでの時間。規則:いずれかのタイマーがまだあなたに有用な間は、ボリュームに書き込まないこと。
これは、誰かが NTFS ボリュームを渡して「X を削除した、取り戻せるか」と言ったときに実際に私が実行する回復ワークフローです。X が単一のファイルか、ディレクトリツリーか、SDelete で触られたディレクトリの内容かに関係なく、同じツールボックスから引き出します。
なぜ削除は消去ではないのか
Windows が NTFS ボリュームからファイルを削除するとき。
- レコードヘッダフラグのオフセット 0x16 にある
IN_USEフラグ(ビット 0)がクリアされます。 - データを保持していたクラスタが
$Bitmapで空きとマークされます。 - 親ディレクトリの
$INDEX_ROOTエントリが削除されます。
起こらないこと。何もレコードやクラスタを上書きしません。次のアロケーション用に利用可能とフラグされます。他の何かがそれらを認領するまで、ファイルは回復可能です。フィールド単位の詳細は 削除を生き残るもの を参照してください。
MFT スロット回復タイマーとデータクラスタ回復タイマーは独立です。再利用されたレコード(スロットは今、別のファイル)でも、データクラスタが古いバイトを保持している場合があります。新しいファイルにクラスタが割り当てられたが、削除済みレコードが無傷の場合もあります。2 つの状況は異なる回復戦略を必要とします。
ステップ 1: ボリュームへの書き込みを停止する
ボリュームへの書き込みごとに、削除されたレコードのスロットやデータクラスタを再利用するリスクがあります。ファイルが重要なら。
- それに触れていたアプリケーションを停止します。データベースなら、エンジンを停止します。ドキュメントなら、エディタを閉じます。
- ファイルがシステムドライブ上にあり、システムがまだ動作している場合、OS 自体が常に書き込んでいます(ページング、prefetch、レジストリ、イベントログ)。電源を切るか、外部メディアから起動します。ライブシステムは、秒ごとに回復可能なスペースを失っています。
- 外部ドライブの場合、直ちにアンマウントします。Windows ではイジェクト、Linux では
umount。
これは、回復が「簡単」になると考えるときに人が省略するステップです。私が見てきた失敗した回復ケースの半分は、このステップで失敗しました。
ステップ 2: ディスクをイメージ化する
オリジナルではなくコピー上で作業します。標準的な選択肢。
- FTK Imager。無料、GUI、
.ddまたは.E01イメージを生成します。読み込み中にソースをハッシュ化します。 - Linux 上の
dd。dd if=/dev/sdX of=disk.img bs=4M conv=noerror,sync status=progress。健全なドライブでは速いです。 ddrescue。遅いですが、故障しているドライブの読み取りエラーを許容します。ドライブが問題(カチカチ音、遅い読み取り、SMART 警告)の場合の正しい選択です。
取得後直ちにイメージを(SHA-256 で)ハッシュ化します。以降のすべてのステップはオリジナルではなくイメージに対して動作します。
ステップ 3: 正しい回復アプローチを選ぶ
アプローチは、まだ何が無傷かに依存します。
MFT replay は、削除されたファイルのレコードがまだテーブルにある場合に行います。削除されたレコードをリストするツールで $MFT を解析します。ファイルの名前、タイムスタンプ、親ディレクトリ、そして(小さなファイルの場合)データがレコードから回復可能です。非レジデントファイルの場合、ランリストは依然として元のクラスタを指しており、それらのクラスタがまだ上書きされていなければ、icat または同等のツールがデータを抽出します。
- MFTECmd は削除されたレコードをリストし、レジデントデータをタグ付けします。
- ブラウザパーサ は削除エントリへのフィルタを 1 クリックで行い、レジデントデータをインラインで表示します。
- Sleuth Kit の
fls -d -mは削除されたエントリをリストします。icat -rは可能な場合にデータを回復します。
ファイルシステム対応の回復ツール は、ボリュームまたはイメージから GUI 駆動の選択的復元が欲しいときに使います。
- R-Studio。商用、NTFS におけるアナリストの選択。複雑な損傷を処理し、フォーマット済みボリュームから回復し、EFS と BitLocker(キー付き)を理解します。
- TestDisk + PhotoRec。無料、成熟しており、パーティション損傷に適しています。PhotoRec はファイルシステム対応ではなくシグネチャカービングなので、ファイル名を失います。
- Recuva。消費者向け。単純なボリューム上の単一ファイル単一ドライブ回復にはよいです。調査用には使いません。
シグネチャカービング は、MFT が失われたかレコードが再利用されたときに使います。scalpel、foremost、PhotoRec は既知のファイルシグネチャ(JPEG FF D8 FF、PNG 89 50 4E 47、ZIP 50 4B 03 04、PDF 25 50 44 46)について生イメージをスキャンし、見つけたものを再アセンブルします。カービングされたファイルはファイル名とタイムスタンプを失います。それらは MFT 内にありました。バイト自体は、断片化を modulo として戻ってきます。
断片化したファイルでは、シグネチャカービングは苦戦します。カーバーは適切に見える連続クラスタを連結しますが、ファイルがディスク上に散らばっていれば再アセンブルできません。NTFS 対応の MFT replay は、ランリストがすべての断片を明示的に記述するため断片化を正しく処理します。
ステップ 4: MFT 回復が唯一の経路のとき
小さなファイル($DATA が約 700 バイト未満)は MFT レコード内に完全に存在します。$Bitmap が数十回上書きされていても、スロットが再利用されるまでレジデントバイトはレコード内に座っています。resident data を参照してください。
小さなテキストファイル、小さな JSON 設定、PowerShell スクリプト、レジストリエクスポート、小さな証明書、または .lnk ファイルの場合、ブラウザパーサ が最速の経路であることがよくあります。抽出した $MFT をドロップし、削除エントリにフィルタし、レジデント $DATA を持つレコードを探し、バイトをコピーアウトします。データが最初から MFT を離れていないため、何も動作しないときにこれが動作します。
本当に回復不能なもの
上書きされたクラスタ。 最新の HDD と SSD は、一度書き込まれたデータの現実的な回復経路を提供しません。古いフォレンジック文献の空想的な「残留磁気」回復は、今十年に製造されたドライブには適用されません。密度が高すぎ、ヘッドの位置決めが精密すぎます。
TRIM によって再利用された SSD ブロック。 SSD コントローラが TRIM を実行すると、基盤フラッシュはガベージコレクション中にゼロ化されます。データは速く失われます。最新の Windows での削除と TRIM 完了の間のウィンドウは、せいぜい秒単位です。
キーのない暗号化されたボリューム。 BitLocker、VeraCrypt、または LUKS で暗号化された NTFS ボリュームは、キーなしでは回復不能です。クリアテキストはそもそもディスクに触れていません。
有能なワイパーでワイプされたファイル。 sdelete -p 3 -z -s -q C:\target\* はファイルのクラスタを 3 回上書きし、空きスペースをゼロ化し、再帰します。データクラスタの回復は不可能です。MFT レコードは依然としてメタデータとレジデントデータを保持している可能性がありますが、実質的なファイル内容は失われています。
レジデントデータ:物理があなたに味方するケース
レジデントデータのケースは若手アナリストを驚かせ続けます。しきい値以下のファイルは MFT レコード内にインラインで座っています。レコードはスロットが再利用されるまで残ります。データ領域は無関係です。$Bitmap が 1,000 回上書きされていても、レジデントバイトはまだそこにあります。
私はかつて、削除後さらに 2 週間使用されほとんどが上書きされていたハードドライブから 400 バイトの .config ファイルを回復しました。レコード 230,000 より上の MFT スロットは再利用されていませんでした。完全なファイルがそこに、レジデントな形でレコード内に座っていました。5 分の作業でした。
これが、私が小さなファイルに対してデータ領域に触れる前に常に MFT ファーストの回復を試す理由です。
よくある質問
NTFS で削除されたファイルはどれくらいの間回復可能ですか?
MFT スロットが再利用されデータクラスタが上書きされるまでです。忙しいシステムではこれは時間単位です。アイドルなシステムでは数か月になることもあります。固定のタイマーはなく、ボリュームのアロケーション圧力によって駆動されます。
ごみ箱を空にすると回復が難しくなりますか?
いいえ。ごみ箱 は各ボリューム上の隠しディレクトリ($Recycle.Bin)です。空にするとファイルが通常の NTFS の意味で削除されます。同じ回復テクニックが適用されます。空にする前は、ファイルは $R<ID> という名前で \$Recycle.Bin\<SID>\ 配下の通常の NTFS ファイルです。$I<ID> の兄弟ファイルが元のパスを記録します。
del /F または Shift+Delete で削除されたファイルを回復できますか?
はい。これらはごみ箱をスキップしますが、同じように削除します(IN_USE クリア、クラスタ解放)。MFT レコードは再利用されるまでそこにあります。
フォーマットされた NTFS ドライブからファイルを回復できますか?
クイックフォーマットはブートセクタと新しい $MFT のみを書き換えます。古いデータクラスタのほとんどは無傷で、以前の MFT レコードの多くは(NTFS は同じ開始オフセットを再利用します)、生のボリュームにわたる FILE ヘッダのシグネチャカービングで回復可能です。フルフォーマットはボリュームをゼロ化します。そのデータは失われています。
削除前にリネームされたファイルはどうですか?
削除後の MFT レコードは最終的な名前(リネーム後)を示します。USN ジャーナル は RENAME_OLD_NAME / RENAME_NEW_NAME のペアを保持しているため、そこから元の名前を回復できます。
参考資料
- Brian Carrier, File System Forensic Analysis。NTFS での削除セマンティクスと回復の章。
- Sleuth Kit の
fls -dとicat -rのドキュメント。削除されたファイル列挙とデータ回復のための標準的なコマンドラインワークフローです。 - PhotoRec のドキュメント。MFT が正しいツールでなくなったときのシグネチャカービングのリファレンスです。