ブート セクタ ($Boot)¶
$Bootとは¶
$Boot は、すべての NTFS ボリュームの MFT エントリ 7 です。ボリュームの最初の 8 KiB です。その最初のセクターである ボリューム ブート レコード には、ファイル システムを記述する BIOS パラメーター ブロックが保持されます。
- セクターとクラスターのサイズ、ボリューム内のセクターの数、および 隠しセクター (ボリュームの前のディスク上のセクター、つまりボリュームのパーティションが開始される場所)。
- ここで、
$MFTと$MFTMirrは始まり、FILE と INDX レコードのサイズです。 - 64 ビット ボリュームのシリアル番号。ボリュームのフォーマット時に設定されます。
最初のセクターの残りとその後の 15 セクターには、Windows をロードする ブート コード が保持されます。
シリアル番号の下位 32 ビットは、Windows では XXXX-XXXX (vol、dir) として表示され、LNK のショートカットとして が表示されます。ファイルが存在していたボリュームの Jump Lists および Prefetch レコード。 $Boot は、これらのレコードを収集されたホストのボリュームに関連付けます。
この証拠から判断できること: LNK、Jump Lists、Prefetch のボリュームシリアル番号が $Boot の VolumeSerialNumber と一致する場合、そのボリューム、または同じ番号を付与された・コピーされた別のボリュームを指します。シリアル番号は変更可能で、ホスト間で一意ではありません。
保存場所と収集¶
raw 対応のフォレンジック ツールを使用して収集するか、ボリューム イメージの最初のセクターを読み取ります。どちらも同じバイトです。 Juntei は、NTFS ブート セクターで始まるファイルを読み取るため、ボリューム イメージが入力として機能します。ディスク イメージは、代わりにパーティション テーブルから始まります。 Juntei にパーティションのボリュームを与えます。
分析時の注意点¶
- シリアル番号はボリュームをフォーマットすると変わります。シリアル番号が現在のボリュームに一致しない LNK ファイルは、リムーバブル メディア、ネットワーク共有のサーバー、またはそれ以降にフォーマットされたボリュームを指している可能性があります。
- ブート コードは、同じ Windows でフォーマットされたボリュームでは同じです。DFIR アーティファクトの Windows、10、11、およびサーバー 2012 R2
$Bootファイルで同じです。博物館。ボリューム ブート レコード ブートキットは、このフィールド、またはブート コードが$Bootの残りの部分を見つけるために使用する隠しセクター フィールドを変更します。結論を下す前に、BootCodeSHA256、JumpInstruction、およびHiddenSectorsを他のホストおよびパーティション テーブルと比較してください。ブート マネージャーや暗号化ソフトウェアによってもブート コードが変更される可能性があります。 - BitLocker 暗号化ボリュームのイメージは、BitLocker 自体のブート セクター (OEM ID
-FVE-FS-) で始まります。-fを指定すると、Juntei はそれを報告しますが、Problemsは NTFS ではないと言います。 NTFS ブート セクターは暗号化されたデータ内にあります。ロック解除されたボリュームから収集された$Bootは、NTFS です。 Problemsは、完全な Windows 実装性テストを提供するのではなく、認識された構造的不一致と切り捨てをリストします。それ自体を攻撃の発見としてではなく、彫刻されたセクターとコピーを評価するために使用します。ブートコード ハッシュには、最初のジャンプ、BIOS パラメーター ブロック、および終了署名が含まれません。それらのフィールドも調べてください。
Juntei で解析する¶
Usage: juntei parse-ntfs boot <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find $Boot files (named $Boot, or starting with an NTFS boot sector)
-f, --file <FILE> Parse one $Boot file, or an NTFS volume image (its first sector)
Output:
-o, --output <FILE> Save every boot sector
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-ntfs boot -f '$Boot'
juntei parse-ntfs boot -d evidence/ -o boot.csv
juntei parse-ntfs boot -f volume.dd -t json
概要には、各ブート セクターのボリューム シリアル番号 (Windows が示すように、また LNK および Prefetch フィールドが示すように)、サイズ、クラスター サイズ、および $MFT クラスターがリストされます。複数のホストが解析されると、ブート コード ハッシュによってホストがグループ化され、ブート コードが他のボリュームと異なるボリュームが目立つようになります。
CSV 出力フィールド¶
| フィールド | 解釈 |
|---|---|
SourcePath |
入力ファイル。 |
VolumeSerialNumber |
32 ビットのシリアル番号 (LNK、ジャンプ リスト、および Prefetch 出力) にそれが表示されます (180B1E67)。 Windows は 180B-1E67 と表示されます。 |
VolumeSerialNumber64 |
64 ビットのシリアル番号全体。 |
OEM-ID |
NTFS ボリューム上の NTFS。 |
BytesPerSector, SectorsPerCluster, ClusterSize |
ボリュームのジオメトリ。 128 上のクラスターごとのセクターは 2 の累乗として記録され、ここでデコードされます。有効でない場合は空です。 |
TotalSectors, VolumeSize |
ボリューム内のセクターとそのサイズ (バイト単位)。最後にブート セクターのコピーは含まれません。 |
HiddenSectors |
ボリュームの前のディスク上のセクタ: そのパーティションが始まる場所。 |
MFT-Cluster, MFT-Offset |
$MFT が始まる場所 (クラスター単位、ボリュームの先頭からのバイト単位)。 |
MFT-MirrorCluster, MFT-MirrorOffset |
$MFTMirr が始まる場所。 |
FileRecordSize, IndexRecordSize |
FILE レコード (通常は 1,024) および INDX レコード (通常は 4,096) ごとのバイト数。 |
MediaDescriptor |
ハードディスクの場合は F8。 |
JumpInstruction |
最初の 3 バイト (EB 52 90): BIOS パラメータ ブロックを越えてブート コードにジャンプします。 |
EndSignature |
有効なブート セクターの末尾にある 55 AA。 |
BootCodeSHA256 |
ブート コードの SHA-256: 最初のセクターのバイト 0x54 ~ 0x1FD と残りの 8 KiB。 |
Problems |
Windows がマウントしないもの: NTFS 以外の OEM ID、55 AA なし、無効なサイズ、FAT フィールド NTFS はゼロセットのまま、$MFT はボリュームの終わりを超えます。 8 KiB より短いファイル。 |
JSON/JSONL には同じフィールドと名前があり、数値は数値、null は不明な値、Problems はリストとなります。
調査戦略¶
- 各ホストの
VolumeSerialNumberを、その LNK ファイル、Jump Lists および Prefetch ファイルのボリューム シリアル番号の横に配置します。収集されたボリュームに一致しないものは、他のボリュームです (USB ドライブ、共有、それ以降にフォーマットされたボリューム)。 - USB devices 出力で他のシリアル番号を調べます。この出力には、マウントされたリムーバブル ボリュームのボリューム シリアル番号がリストされています。
- ホスト間で
BootCodeSHA256とHiddenSectorsを比較します。逆アセンブラとディスクのパーティション テーブルを使用して異なるブート コードを調査し、ブート関連のイベント ログ エントリを探します。 MFT-OffsetおよびClusterSizeを使用して、ボリューム イメージ内の$MFTを検索します。
さらに詳しい情報¶
- Microsoft: NTFS 概要
- libfsntfs: NTFS 形式のドキュメント (ボリューム ヘッダー)
- 探偵キット: fsstat
- ys-ntfs-parser (
bootクレート)