Partitions/File Systems/Carving

HackTricksをサポートする

パーティション

ハードドライブまたはSSDディスクは、データを物理的に分離する目的で異なるパーティションを含むことができます。 ディスクの最小単位はセクター(通常は512Bで構成される)です。したがって、各パーティションのサイズはそのサイズの倍数である必要があります。

MBR(マスターブートレコード)

これは、ブートコードの446Bの後のディスクの最初のセクターに割り当てられています。このセクターは、PCにどのパーティションをどこからマウントするかを示すために不可欠です。 最大で4つのパーティションを許可します(アクティブ/ブート可能なのは最大で1つのみ)。ただし、より多くのパーティションが必要な場合は、拡張パーティションを使用できます。この最初のセクターの最終バイトはブートレコード署名0x55AAです。アクティブとしてマークできるパーティションは1つだけです。 MBRは最大2.2TBを許可します。

MBRのバイト440から443の間には、Windowsディスク署名が見つかります(Windowsが使用されている場合)。ハードディスクの論理ドライブレターはWindowsディスク署名に依存します。この署名を変更すると、Windowsが起動しなくなる可能性があります(ツール:Active Disk Editor

フォーマット

オフセット長さアイテム

0 (0x00)

446(0x1BE)

ブートコード

446 (0x1BE)

16 (0x10)

最初のパーティション

462 (0x1CE)

16 (0x10)

2番目のパーティション

478 (0x1DE)

16 (0x10)

3番目のパーティション

494 (0x1EE)

16 (0x10)

4番目のパーティション

510 (0x1FE)

2 (0x2)

署名 0x55 0xAA

パーティションレコードフォーマット

オフセット長さアイテム

0 (0x00)

1 (0x01)

アクティブフラグ (0x80 = ブート可能)

1 (0x01)

1 (0x01)

開始ヘッド

2 (0x02)

1 (0x01)

開始セクター (ビット0-5); シリンダの上位ビット (6-7)

3 (0x03)

1 (0x01)

開始シリンダの最下位8ビット

4 (0x04)

1 (0x01)

パーティションタイプコード (0x83 = Linux)

5 (0x05)

1 (0x01)

終了ヘッド

6 (0x06)

1 (0x01)

終了セクター (ビット0-5); シリンダの上位ビット (6-7)

7 (0x07)

1 (0x01)

終了シリンダの最下位8ビット

8 (0x08)

4 (0x04)

パーティション前のセクター (リトルエンディアン)

12 (0x0C)

4 (0x04)

パーティション内のセクター

LinuxでMBRをマウントするには、まず開始オフセットを取得する必要があります(fdiskpコマンドを使用できます)

その後、次のコードを使用します。

#Mount MBR in Linux
mount -o ro,loop,offset=<Bytes>
#63x512 = 32256Bytes
mount -o ro,loop,offset=32256,noatime /path/to/image.dd /media/part/

LBA (論理ブロックアドレッシング)

論理ブロックアドレッシング (LBA) は、コンピュータストレージデバイスに保存されたデータブロックの位置を指定するために使用される一般的なスキームで、通常はハードディスクドライブなどの二次ストレージシステムです。LBAは特にシンプルな線形アドレッシングスキームであり、ブロックは整数インデックスによって位置付けられ、最初のブロックはLBA 0、2番目はLBA 1、というように続きます。

GPT (GUIDパーティションテーブル)

GUIDパーティションテーブル、通称GPTは、MBR(マスターブートレコード)と比較してその強化された機能のために好まれています。GPTは、パーティションのためのグローバルに一意の識別子を持つことが特徴で、いくつかの点で際立っています:

  • 位置とサイズ: GPTとMBRは両方ともセクター0から始まります。しかし、GPTは64ビットで動作し、MBRは32ビットです。

  • パーティション制限: GPTはWindowsシステムで最大128パーティションをサポートし、最大9.4ZBのデータを収容できます。

  • パーティション名: 最大36のUnicode文字でパーティションに名前を付けることができます。

データの耐障害性と回復:

  • 冗長性: MBRとは異なり、GPTはパーティショニングとブートデータを単一の場所に制限しません。このデータをディスク全体に複製し、データの整合性と耐障害性を向上させます。

  • 循環冗長検査 (CRC): GPTはデータの整合性を確保するためにCRCを使用します。データの破損を積極的に監視し、検出された場合、GPTは別のディスク位置から破損したデータを回復しようとします。

保護MBR (LBA0):

  • GPTは保護MBRを通じて後方互換性を維持します。この機能はレガシーMBRスペースに存在しますが、古いMBRベースのユーティリティが誤ってGPTディスクを上書きするのを防ぐように設計されており、GPTフォーマットのディスク上のデータ整合性を保護します。

ハイブリッドMBR (LBA 0 + GPT)

Wikipediaから

BIOSサービスを通じてGPTベースのブートをサポートするオペレーティングシステムでは、最初のセクターはブートローダーコードの最初のステージを保存するためにも使用される可能性がありますが、GPT パーティションを認識するように修正されています。MBRのブートローダーは、512バイトのセクターサイズを仮定してはなりません。

パーティションテーブルヘッダー (LBA 1)

Wikipediaから

パーティションテーブルヘッダーは、ディスク上の使用可能なブロックを定義します。また、パーティションテーブルを構成するパーティションエントリの数とサイズも定義します(テーブルのオフセット80および84)。

オフセット長さ内容

0 (0x00)

8バイト

シグネチャ ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h または 0x5452415020494645ULL リトルエンディアンマシン上)

8 (0x08)

4バイト

UEFI 2.8用のリビジョン 1.0 (00h 00h 01h 00h)

12 (0x0C)

4バイト

リトルエンディアンでのヘッダーサイズ (バイト単位、通常は5Ch 00h 00h 00hまたは92バイト)

16 (0x10)

4バイト

ヘッダーのCRC32 (オフセット +0からヘッダーサイズまで) リトルエンディアンで、このフィールドは計算中にゼロにされます

20 (0x14)

4バイト

予約; ゼロでなければならない

24 (0x18)

8バイト

現在のLBA (このヘッダーコピーの位置)

32 (0x20)

8バイト

バックアップLBA (他のヘッダーコピーの位置)

40 (0x28)

8バイト

パーティション用の最初の使用可能LBA (プライマリパーティションテーブルの最後のLBA + 1)

48 (0x30)

8バイト

最後の使用可能LBA (セカンダリパーティションテーブルの最初のLBA − 1)

56 (0x38)

16バイト

混合エンディアンのディスクGUID

72 (0x48)

8バイト

パーティションエントリの配列の開始LBA (常にプライマリコピーで2)

80 (0x50)

4バイト

配列内のパーティションエントリの数

84 (0x54)

4バイト

単一のパーティションエントリのサイズ (通常は80hまたは128)

88 (0x58)

4バイト

リトルエンディアンでのパーティションエントリ配列のCRC32

92 (0x5C)

*

予約; ブロックの残りの部分はゼロでなければならない (512バイトのセクターサイズの場合420バイト; ただし、より大きなセクターサイズではより多くなる可能性があります)

パーティションエントリ (LBA 2–33)

GUIDパーティションエントリ形式

オフセット

長さ

内容

0 (0x00)

16バイト

パーティションタイプGUID (混合エンディアン)

16 (0x10)

16バイト

一意のパーティションGUID (混合エンディアン)

32 (0x20)

8バイト

40 (0x28)

8バイト

最後のLBA (含む、通常は奇数)

48 (0x30)

8バイト

属性フラグ (例: ビット60は読み取り専用を示す)

56 (0x38)

72バイト

パーティション名 (36 UTF-16LEコードユニット)

パーティションタイプ

より多くのパーティションタイプはhttps://en.wikipedia.org/wiki/GUID_Partition_Tableで確認できます。

検査

ArsenalImageMounterを使用してフォレンジックイメージをマウントした後、WindowsツールActive Disk Editorを使用して最初のセクターを検査できます。次の画像では、セクター0MBRが検出され、解釈されました:

もしそれがMBRの代わりにGPTテーブルであった場合、セクター1に_EFI PART_というシグネチャが表示されるはずです(前の画像では空です)。

ファイルシステム

Windowsファイルシステムリスト

  • FAT12/16: MSDOS, WIN95/98/NT/200

  • FAT32: 95/2000/XP/2003/VISTA/7/8/10

  • ExFAT: 2008/2012/2016/VISTA/7/8/10

  • NTFS: XP/2003/2008/2012/VISTA/7/8/10

  • ReFS: 2012/2016

FAT

FAT (ファイルアロケーションテーブル)ファイルシステムは、そのコアコンポーネントであるファイルアロケーションテーブルをボリュームの開始位置に配置するように設計されています。このシステムは、2つのコピーのテーブルを維持することでデータを保護し、1つが破損してもデータの整合性を確保します。テーブルとルートフォルダーは固定位置に存在する必要があり、システムの起動プロセスにとって重要です。

ファイルシステムの基本的なストレージ単位はクラスター、通常は512Bであり、複数のセクターで構成されています。FATはバージョンを経て進化してきました:

  • FAT12、12ビットのクラスターアドレスをサポートし、最大4078クラスター(UNIXでは4084)を処理します。

  • FAT16、16ビットアドレスに拡張され、最大65,517クラスターを収容します。

  • FAT32、32ビットアドレスでさらに進化し、ボリュームごとに驚異的な268,435,456クラスターを許可します。

FATバージョン全体に共通する重要な制限は、4GBの最大ファイルサイズであり、これはファイルサイズストレージに使用される32ビットフィールドによって課せられています。

特にFAT12およびFAT16のルートディレクトリの主要なコンポーネントには以下が含まれます:

  • ファイル/フォルダー名 (最大8文字)

  • 属性

  • 作成、変更、最終アクセス日

  • FATテーブルアドレス (ファイルの開始クラスターを示す)

  • ファイルサイズ

EXT

Ext2は、ジャーナリングしないパーティション(あまり変更されないパーティション)に最も一般的に使用されるファイルシステムです。Ext3/4ジャーナリングを行い、通常は残りのパーティションに使用されます。

メタデータ

一部のファイルにはメタデータが含まれています。この情報はファイルの内容に関するものであり、ファイルタイプによってはアナリストにとって興味深い情報を持っている場合があります。例えば、以下のような情報が含まれることがあります:

  • タイトル

  • 使用されたMS Officeバージョン

  • 著者

  • 作成日および最終変更日

  • カメラのモデル

  • GPS座標

  • 画像情報

exiftoolMetadiverのようなツールを使用して、ファイルのメタデータを取得できます。

削除ファイルの回復

ログされた削除ファイル

前述のように、ファイルが「削除」された後でも、いくつかの場所にファイルがまだ保存されています。これは通常、ファイルシステムからファイルを削除することが単に削除としてマークされるだけで、データは触れられないためです。そのため、ファイルのレジストリ(MFTのような)を検査し、削除されたファイルを見つけることが可能です。

また、OSは通常、ファイルシステムの変更やバックアップに関する多くの情報を保存しているため、それらを使用してファイルまたはできるだけ多くの情報を回復しようとすることが可能です。

File/Data Carving & Recovery Tools

ファイルカービング

ファイルカービングは、データの塊の中からファイルを見つけようとする技術です。このようなツールが機能する主な方法は3つあります:ファイルタイプのヘッダーとフッターに基づく、ファイルタイプの構造に基づく、およびコンテンツ自体に基づく

この技術は断片化されたファイルを回収するためには機能しないことに注意してください。ファイルが連続したセクターに保存されていない場合、この技術はそれを見つけることができないか、少なくともその一部を見つけることができません。

ファイルカービングに使用できるツールはいくつかあり、検索したいファイルタイプを指定できます。

File/Data Carving & Recovery Tools

データストリームCarving

データストリームカービングはファイルカービングに似ていますが、完全なファイルを探すのではなく、興味深い情報の断片を探します。 例えば、ログされたURLを含む完全なファイルを探すのではなく、この技術はURLを検索します。

File/Data Carving & Recovery Tools

セキュア削除

明らかに、ファイルやそのログの一部を**「安全に」削除する方法があります。例えば、ファイルの内容をジャンクデータで数回上書きし、その後$MFT$LOGFILEからファイルに関するログを削除**し、ボリュームシャドウコピーを削除することが可能です。 この操作を行っても、ファイルの存在がまだログされている他の部分があるかもしれないことに気付くかもしれませんが、それは真実であり、フォレンジック専門家の仕事の一部はそれらを見つけることです。

参考文献

Support HackTricks

Last updated