Partitions/File Systems/Carving
Last updated
Last updated
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
ハードドライブまたはSSDディスクは、データを物理的に分離する目的で異なるパーティションを含むことができます。 ディスクの最小単位はセクター(通常は512Bで構成される)です。したがって、各パーティションのサイズはそのサイズの倍数である必要があります。
これは、ブートコードの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をマウントするには、まず開始オフセットを取得する必要があります(fdisk
とp
コマンドを使用できます)
その後、次のコードを使用します。
LBA (論理ブロックアドレッシング)
論理ブロックアドレッシング (LBA) は、コンピュータストレージデバイスに保存されたデータブロックの位置を指定するために使用される一般的なスキームで、通常はハードディスクドライブなどの二次ストレージシステムです。LBAは特にシンプルな線形アドレッシングスキームであり、ブロックは整数インデックスによって位置付けられ、最初のブロックはLBA 0、2番目はLBA 1、というように続きます。
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)
BIOSサービスを通じてGPTベースのブートをサポートするオペレーティングシステムでは、最初のセクターはブートローダーコードの最初のステージを保存するためにも使用される可能性がありますが、GPT パーティションを認識するように修正されています。MBRのブートローダーは、512バイトのセクターサイズを仮定してはなりません。
パーティションテーブルヘッダー (LBA 1)
パーティションテーブルヘッダーは、ディスク上の使用可能なブロックを定義します。また、パーティションテーブルを構成するパーティションエントリの数とサイズも定義します(テーブルのオフセット80および84)。
オフセット | 長さ | 内容 |
---|---|---|
0 (0x00) | 8バイト | |
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バイト | 最初の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を使用して最初のセクターを検査できます。次の画像では、セクター0でMBRが検出され、解釈されました:
もしそれがMBRの代わりにGPTテーブルであった場合、セクター1に_EFI PART_というシグネチャが表示されるはずです(前の画像では空です)。
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 (ファイルアロケーションテーブル)ファイルシステムは、そのコアコンポーネントであるファイルアロケーションテーブルをボリュームの開始位置に配置するように設計されています。このシステムは、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テーブルアドレス (ファイルの開始クラスターを示す)
ファイルサイズ
Ext2は、ジャーナリングしないパーティション(あまり変更されないパーティション)に最も一般的に使用されるファイルシステムです。Ext3/4はジャーナリングを行い、通常は残りのパーティションに使用されます。
一部のファイルにはメタデータが含まれています。この情報はファイルの内容に関するものであり、ファイルタイプによってはアナリストにとって興味深い情報を持っている場合があります。例えば、以下のような情報が含まれることがあります:
タイトル
使用されたMS Officeバージョン
著者
作成日および最終変更日
カメラのモデル
GPS座標
画像情報
exiftoolやMetadiverのようなツールを使用して、ファイルのメタデータを取得できます。
前述のように、ファイルが「削除」された後でも、いくつかの場所にファイルがまだ保存されています。これは通常、ファイルシステムからファイルを削除することが単に削除としてマークされるだけで、データは触れられないためです。そのため、ファイルのレジストリ(MFTのような)を検査し、削除されたファイルを見つけることが可能です。
また、OSは通常、ファイルシステムの変更やバックアップに関する多くの情報を保存しているため、それらを使用してファイルまたはできるだけ多くの情報を回復しようとすることが可能です。
File/Data Carving & Recovery Toolsファイルカービングは、データの塊の中からファイルを見つけようとする技術です。このようなツールが機能する主な方法は3つあります:ファイルタイプのヘッダーとフッターに基づく、ファイルタイプの構造に基づく、およびコンテンツ自体に基づく。
この技術は断片化されたファイルを回収するためには機能しないことに注意してください。ファイルが連続したセクターに保存されていない場合、この技術はそれを見つけることができないか、少なくともその一部を見つけることができません。
ファイルカービングに使用できるツールはいくつかあり、検索したいファイルタイプを指定できます。
File/Data Carving & Recovery Toolsデータストリームカービングはファイルカービングに似ていますが、完全なファイルを探すのではなく、興味深い情報の断片を探します。 例えば、ログされたURLを含む完全なファイルを探すのではなく、この技術はURLを検索します。
File/Data Carving & Recovery Tools明らかに、ファイルやそのログの一部を**「安全に」削除する方法があります。例えば、ファイルの内容をジャンクデータで数回上書きし、その後$MFTや$LOGFILEからファイルに関するログを削除**し、ボリュームシャドウコピーを削除することが可能です。 この操作を行っても、ファイルの存在がまだログされている他の部分があるかもしれないことに気付くかもしれませんが、それは真実であり、フォレンジック専門家の仕事の一部はそれらを見つけることです。
iHackLabs認定デジタルフォレンジックWindows
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)