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)
EFIではなくBIOSサービスを介してGPTベースのブートをサポートするオペレーティングシステムでは、最初のセクターはブートローダーコードの最初のステージを保存するためにも使用される可能性がありますが、GPT パーティションを認識するように修正されています。MBRのブートローダーは、512バイトのセクターサイズを仮定してはなりません。
パーティションテーブルヘッダー (LBA 1)
パーティションテーブルヘッダーは、ディスク上の使用可能なブロックを定義します。また、パーティションテーブルを構成するパーティションエントリの数とサイズを定義します(テーブルのオフセット80および84)。
0 (0x00)
8バイト
8 (0x08)
4バイト
バージョン 1.0 (00h 00h 01h 00h) for UEFI 2.8
12 (0x0C)
4バイト
ヘッダーサイズ(リトルエンディアン、バイト単位、通常は5Ch 00h 00h 00hまたは92バイト)
16 (0x10)
4バイト
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)
オフセット
長さ
内容
0 (0x00)
16バイト
16 (0x10)
16バイト
ユニークパーティションGUID(混合エンディアン)
32 (0x20)
8バイト
40 (0x28)
8バイト
最後のLBA(含む、通常は奇数)
48 (0x30)
8バイト
属性フラグ(例:ビット60は読み取り専用を示す)
56 (0x38)
72バイト
パーティションタイプ
より多くのパーティションタイプは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は通常、ファイルシステムの変更やバックアップに関する多くの情報を保存しているため、それらを使用してファイルまたはできるだけ多くの情報を回復しようとすることが可能です。
ファイルカービングは、大量のデータの中からファイルを見つけようとする技術です。このようなツールが機能する主な方法は3つあります:ファイルタイプのヘッダーとフッターに基づく、ファイルタイプの構造に基づく、およびコンテンツ自体に基づく。
この技術は断片化されたファイルを回収するためには機能しないことに注意してください。ファイルが連続したセクターに保存されていない場合、この技術はそれを見つけることができないか、少なくともその一部を見つけることができません。
ファイルカービングのために使用できるツールはいくつかあり、検索したいファイルタイプを指定できます。
データストリームカービングはファイルカービングに似ていますが、完全なファイルを探すのではなく、興味深い情報の断片を探します。 例えば、ログされたURLを含む完全なファイルを探すのではなく、この技術はURLを検索します。
明らかに、ファイルやそのログの一部を**「安全に」削除する方法があります。例えば、ファイルの内容をジャンクデータで数回上書きし、その後$MFTや$LOGFILEからファイルに関するログ**を削除し、ボリュームシャドウコピーを削除することが可能です。 この操作を行っても、ファイルの存在がまだログされている他の部分があるかもしれないことに気付くかもしれませんが、それは真実であり、フォレンジック専門家の仕事の一部はそれらを見つけることです。
iHackLabs認定デジタルフォレンジックWindows
シグネチャ ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h または 0x5452415020494645ULLリトルエンディアンマシン上)
ヘッダーの(オフセット +0 からヘッダーサイズまで)リトルエンディアンで、このフィールドは計算中にゼロにされます
(混合エンディアン)
最初のLBA()
パーティション名(36 LEコードユニット)
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する: HackTricks Training GCP Red Team Expert (GRTE)