パーティション/ファイルシステム/カービング

Reading time: 18 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

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コマンドを使用できます)

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

bash
#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フォーマットのディスク上のデータ整合性を保護します。

https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID_Partition_Table_Scheme.svg/800px-GUID_Partition_Table_Scheme.svg.png

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

From Wikipedia

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

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

From Wikipedia

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

オフセット長さ内容
0 (0x00)8バイトシグネチャ ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h または 0x5452415020494645ULL リトルエンディアンマシン上)
8 (0x08)4バイトバージョン 1.0 (00h 00h 01h 00h) for UEFI 2.8
12 (0x0C)4バイトヘッダーサイズ(リトルエンディアン、バイト単位、通常は5Ch 00h 00h 00hまたは92バイト)
16 (0x10)4バイトCRC32 ヘッダーのCRC(オフセット +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バイト最初のLBA(リトルエンディアン
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からファイルに関するログ削除し、ボリュームシャドウコピー削除**することが可能です。
このアクションを実行しても、ファイルの存在がまだログされている他の部分があるかもしれないことに気付くかもしれませんが、それは真実であり、フォレンジック専門家の仕事の一部はそれらを見つけることです。

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする