.. | ||
ext.md | ||
file-data-carving-recovery-tools.md | ||
file-data-carving-tools.md | ||
ntfs.md | ||
README.md |
パーティション/ファイルシステム/カービング
{% hint style="success" %}
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 DiscordグループまたはTelegramグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- ハッキングトリックを共有するには、HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを送信してください。
パーティション
ハードドライブまたは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をマウントするには、まず開始オフセットを取得する必要があります(fdisk
とp
コマンドを使用できます)
次に、次のコードを使用します。
#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)
EFIではなくBIOSサービスを通じてGPTベースのブートをサポートするオペレーティングシステムでは、最初のセクターはブートローダーコードの最初のステージを保存するために使用される場合がありますが、GPT パーティションを認識するように修正されています。MBRのブートローダーは、512バイトのセクターサイズを仮定してはなりません。
パーティションテーブルヘッダー (LBA 1)
パーティションテーブルヘッダーは、ディスク上の使用可能なブロックを定義します。また、パーティションテーブルを構成するパーティションエントリの数とサイズも定義します(テーブルのオフセット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) UEFI 2.8 |
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_というシグネチャが表示されるはずです(前の画像では空です)。
ファイルシステム
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座標
- 画像情報
exiftoolやMetadiverのようなツールを使用して、ファイルのメタデータを取得できます。
削除ファイルの回復
ログされた削除ファイル
前述のように、ファイルが「削除」された後でも、いくつかの場所にファイルがまだ保存されています。これは通常、ファイルシステムからファイルを削除することが単に削除としてマークされるだけで、データは触れられないためです。したがって、ファイルのレジストリ(MFTなど)を検査し、削除されたファイルを見つけることが可能です。
また、OSは通常、ファイルシステムの変更やバックアップに関する多くの情報を保存しているため、それらを使用してファイルまたは可能な限り多くの情報を回復しようとすることができます。
{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}
ファイルカービング
ファイルカービングは、大量のデータの中からファイルを見つけようとする技術です。このようなツールが機能する主な方法は3つあります:ファイルタイプのヘッダーとフッターに基づく、ファイルタイプの構造に基づく、およびコンテンツ自体に基づく。
この技術は断片化されたファイルを取得するためには機能しないことに注意してください。ファイルが連続したセクターに保存されていない場合、この技術はそれを見つけることができないか、少なくともその一部を見つけることができません。
ファイルカービングのために、検索したいファイルタイプを指定するいくつかのツールがあります。
{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}
データストリームCarving
データストリームカービングはファイルカービングに似ていますが、完全なファイルを探すのではなく、興味深い情報の断片を探します。
たとえば、ログされたURLを含む完全なファイルを探すのではなく、この技術はURLを検索します。
{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}
セキュア削除
明らかに、ファイルやそれに関するログの一部を**「安全に」削除する方法があります。たとえば、ファイルの内容をジャンクデータで数回上書きし、その後$MFTや$LOGFILEからファイルに関するログ**を削除し、ボリュームシャドウコピーを削除することが可能です。
この操作を実行しても、ファイルの存在がまだログされている他の部分があるかもしれないことに気付くかもしれませんが、それは真実であり、フォレンジック専門家の仕事の一部はそれらを見つけることです。
参考文献
- https://en.wikipedia.org/wiki/GUID_Partition_Table
- http://ntfs.com/ntfs-permissions.htm
- https://www.osforensics.com/faqs-and-tutorials/how-to-scan-ntfs-i30-entries-deleted-files.html
- https://docs.microsoft.com/en-us/windows-server/storage/file-server/volume-shadow-copy-service
- iHackLabs認定デジタルフォレンジックWindows
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.