はじめに
この一連のブログ記事では、GUIDパーティションテーブルスキーマについて深く掘り下げていきます。GPTスキーマを明確に理解し、フォレンジック調査官が最新のストレージデバイスからデータを正確に分析・復元できるようになることを目指します。GPTは、より大きなディスク、複数のパーティション、および冗長性やCRC保護などの改善されたデータ整合性機能をサポートしているため、調査者は必要なすべてのデータにアクセスし、検証することができます。さらに、GPTは最新のオペレーティングシステムやUEFIファームウェアとの互換性があるため、包括的なフォレンジック調査を実行する能力が強化され、デジタル証拠を発見し、フォレンジック調査結果の完全性と信頼性を確保するために不可欠なものとなっています。
まず、保護MBRと、BIOSでレガシードライブに使用される従来のMBRとの違いから説明します。次に、GPTヘッダーとGPTエントリー・アレイについて説明します。最後に、裁判官や陪審員の前で証言するときなど、素人にこれらの概念を説明する際の結論とヒントをお話しします。
最終的には、このシリーズを読めば、私たちのCTFプラットフォームにあるCTFチャレンジに問題なく取り組むことができるだろう。
パート1
保護されたMBR
レガシーな観点からのマスター・ブート・レコード(MBR)は、ハードディスク上に最大4つのプライマリ・パーティションを見つけるためのロードマップを提供してくれた。各16バイトのパーティションエントリーは、FAT32であろうとNTFSであろうと、そのパーティションの場所を案内してくれました。しかし、古いMBRには以下のような制限があった:
- 2TBのサイズ制限。
- プライマリ・パーティションは4つまで。それ以上必要な場合は、プライマリ・パーティションの1つを拡張パーティションとして指定します。
- パーティションテーブルを含むMBRがセクタ0にあり、バックアップがないため、単一障害点となる。
GPTハードディスクのLBA 0(論理セクタ0)には、レガシーMBRではなくProtective MBRと呼ばれるものが含まれています。保護MBRは、図書館の入り口にある「おい、この図書館は今、新しく改良されたシステムを使っているよ。古い方式はここでは使えないから使わないでね。"
保護MBRは、ドライブ上の4つのプライマリパーティションの場所を含む代わりに、ディスク全体をGPTで使用するようにマークし、ディスクが完全に使用されていることを古いシステムに示します。保護MBRは下位互換性のためだけに存在します。ディスクをマークし、レガシーツールがディスク構造を誤って解釈するのを防ぎます。
プロテクションMBRの構造
保護 MBR の最初の 440 バイトには UEFI システムでは使われないブートコードが含まれています。これは無視されます。
以下は、Windows 10を新規インストールしたディスクの仮想レイアウトで、インストールプロセス中に作成されたパーティションはC:ドライブ1つだけです。UEFIシステムパーティションは自動的に作成され、ユーザーからは隠されています。
ここでは、LBA 0にある保護MBRがLBA 1にあるGPTヘッダーを指しているのがわかります。

保護MBRの六角形レイアウト
以下は、保護MBRの16進数レイアウトの例である:


前述したように、ブートコードの最初の440バイトは UEFI システムでは使われません。この最初の 440 バイトがゼロになっているシステムもあります。これは私がこのブログを書くのに使っているワークステーションのプロテクティブ MBR で、Samsung の 1TB NVME ドライブを使っています:

見てわかるように、この場合のProtective MBRは、オフセット440にある4バイト(使われていない)、最初の「プライマリパーティションエントリ」(LBA 1 - GPTヘッダを指す)、セクタの最後の2バイト(0x55AA)にあるブートシグネチャを除いて、全体がゼロで構成されています。
では、Protective MBRに存在する1つのパーティション・エントリーを詳しく見てみよう:


パーティションエントリーの最初のバイトは 0x00 に設定され、ブート可能なパーティションではないことを示します。従来のMBRでは、この値は0x00(ブート不可)か0x80(ブート可)のどちらかになります。次の3バイトは CHSの開始 の4バイト値に対応する。 LBAの開始 フィールドのバイトオフセット 8 に設定される。開始 CHS 値は 0x000200 これを分解してLBAアドレスに変換すると1になる。
には以下の半角値が設定される。 0xEE OSの種類に対応する: GPT保護.オフセット5の3バイトの値は、ディスク上の最後の論理ブロックのCHSアドレスに設定されます。GPTパーティションヘッダへの開始LBAは、オフセット8の4バイトにあり、値は次のように設定されます。 0x01000000 (リトルエンディアン読み取りの場合はLBA 1)。オフセット12にあるレコードの最後の4バイトは、ディスクのサイズから1を引いたものを表す。これは 0xFFFFFFFF ディスクのサイズが大きすぎて、このフィールドで表現できない場合。
保護されたMRBの修理
MBRが破損、紛失、または消去された場合、別のドライブから保護MBRをコピーすることでセクター0を置き換えることができます。オフセット0から446までの0x00を残し、LBA 1を指す汎用パーティションエントリを作成し、オフセット4にGPT保護OSタイプを示す0xEEが存在するようにします。最後に、ブートシグネチャ(0x55AA)をセクタの最後の2バイトに配置します。
一般エントリー
446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 |
00 | 00 | 02 | 00 | EE | FF | FF | FF | 01 | 00 | 00 | 00 | FF | FF | FF | FF |
ブートサイン
510 | 511 |
55 | AA |
プロテクティブMBRをリビルドする場合は、以下のようにすれば十分だろう:

結論
この第 1 回では、保護 MBR と、レガシー・システムとの後方互換性を確保するための重要な役割について探った。保護 MBR がどのようにディスク全体を GPT が使用するものとしてマークし、古いシステムがディスクの構造を誤って解釈するのを防ぐかを調べました。保護 MBR の構造と機能を理解することで、GPT スキーマをより深く理解するための基礎ができました。
ディスクレイアウトを定義し、データの整合性を保証する GPT スキーマの要である GPT ヘッダーに焦点を当てます。パート2では、GPTヘッダーを分解し、各フィールドとその意味を検証します。引き続きGPTスキーマの複雑さを解き明かし、最新のストレージ・デバイスからデータを効果的に管理・復元するための知識を身につけていただきますので、ご期待ください。
GPTの構造をもっと深く知りたい?
で パート2を分解する。 GPTヘッダー そして、ディスク全体のデータの整合性をどのように保証するかを説明する。
それから パート3を探る。 GPTパーティションエントリーの配列 また、フォレンジックアナリストがパーティションテーブルを再構築する際に知っておくべきこと。
5件のフィードバック
この素晴らしい記事をありがとう。
素晴らしいページだ(その1とその2)。
ありがとう!
素晴らしい内容で、この作品と第2部、第3部を高く評価している!