hacktricks/forensics/basic-forensic-methodology/partitions-file-systems-carving/README.md

21 KiB
Raw Blame History

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

htARTEHackTricks AWS Red Team Expert でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法

  • HackTricksで企業を宣伝したい場合やHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
  • 公式PEASSHackTricksスワッグを入手する
  • The PEASS Familyを発見し、独占的なNFTsのコレクションを見つける
  • 💬 Discordグループに参加するか、telegramグループに参加するか、Twitter 🐦@hacktricks_liveをフォローする
  • HackTricksHackTricks CloudのGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する

パーティション

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

MBRMaster Boot Record

これは、ブートコードの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) 第1パーティション
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/

LBALogical block addressing

Logical block addressingLBAは、コンピュータの記憶装置に保存されているデータのブロックの場所を指定するために使用される一般的なスキームです。一般的にはハードディスクドライブなどの二次記憶システムで使用されます。LBAは特にシンプルな線形アドレッシングスキームで、ブロックは整数インデックスによって特定され、最初のブロックはLBA 0、2番目はLBA 1、というようになります。

GPTGUID Partition Table

GUID Partition Table、通称GPTは、MBRMaster Boot Recordと比較して拡張機能が優れているために好まれています。GPTの特徴は以下の通りです

  • 位置とサイズGPTとMBRはどちらもセクタ0から開始します。ただし、GPTは64ビットで動作し、MBRの32ビットとは異なります。
  • パーティション制限GPTはWindowsシステムで最大128個のパーティションをサポートし、9.4ZBのデータを収容できます。
  • パーティション名最大36文字のUnicode文字でパーティションに名前を付ける機能を提供します。

データの強靱性と回復

  • 冗長性MBRとは異なり、GPTはパーティショニングとブートデータを単一の場所に制限しません。これらのデータをディスク全体に複製することで、データの整合性と強靱性が向上します。
  • 巡回冗長性チェックCRCGPTはCRCを使用してデータの整合性を確保します。データの破損を積極的に監視し、検出された場合は別のディスク位置から破損したデータを回復しようとします。

保護MBRLBA0

  • GPTは保護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

ハイブリッドMBRLBA 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.000h 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 233

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

FATFile Allocation Tableファイルシステムは、その中核部品であるファイル割り当てテーブルを中心に設計されており、ボリュームの先頭に配置されています。このシステムは、テーブルの2つのコピーを維持することでデータを保護し、1つが破損してもデータの整合性を確保します。テーブルとルートフォルダは、システムの起動プロセスにとって重要な固定された場所にある必要があります。

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

  • FAT12は、12ビットのクラスタアドレスをサポートし、最大4078クラスタUNIXを含めると4084クラスタを処理します。
  • FAT16は、16ビットのアドレスに拡張され、最大65,517クラスタを収容します。
  • FAT32は、32ビットのアドレスをさらに進化させ、1つのボリュームあたり最大268,435,456クラスタを可能にします。

FATバージョン全般にわたる重要な制限事項は、ファイルサイズの格納に使用される32ビットフィールドによる4GBの最大ファイルサイズです。

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

  • ファイル/フォルダ名最大8文字
  • 属性
  • 作成、変更、最終アクセス日時
  • FATテーブルアドレス(ファイルの開始クラスタを示す)
  • ファイルサイズ

EXT

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

メタデータ

一部のファイルにはメタデータが含まれています。この情報はファイルの内容についてのもので、ファイルタイプによっては興味深い情報が含まれることがあります:

  • タイトル
  • 使用されたMS Officeバージョン
  • 作成および最終変更日時
  • カメラのモデル
  • GPS座標
  • 画像情報

ファイルのメタデータを取得するためにexiftoolMetadiverなどのツールを使用できます。

削除されたファイルの回復

ログされた削除されたファイル

以前に見られたように、ファイルが「削除」された後もファイルが保存されている場所がいくつかあります。通常、ファイルシステムからファイルを削除すると、ファイルは削除されたとマークされますが、データは触れられません。その後、ファイルの登録MFTなどを調査し、削除されたファイルを見つけることが可能です。

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

{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}

ファイルカービング

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

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

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

{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}

データストリームカービング

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

{% content-ref url="file-data-carving-recovery-tools.md" %} file-data-carving-recovery-tools.md {% endcontent-ref %}

安全な削除

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

参考文献