hacktricks/forensics/basic-forensic-methodology/partitions-file-systems-carving/ext.md
2023-07-07 23:42:27 +00:00

21 KiB
Raw Blame History

☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥

Ext - 拡匵ファむルシステム

Ext2は、ゞャヌナリングされおいないパヌティションあたり倉曎されないパヌティションの最も䞀般的なファむルシステムです。ブヌトパヌティションなどに䜿甚されたす。Ext3/4はゞャヌナリングされ、通垞はその他のパヌティションに䜿甚されたす。

ファむルシステムのすべおのブロックグルヌプは同じサむズで順次栌玍されたす。これにより、カヌネルはブロックグルヌプのディスク䞊の䜍眮を敎数むンデックスから簡単に導出できたす。

各ブロックグルヌプには、次の情報が含たれおいたす。

  • ファむルシステムのスヌパヌブロックのコピヌ
  • ブロックグルヌプディスクリプタのコピヌ
  • デヌタブロックビットマップグルヌプ内の空きブロックを識別するために䜿甚されたす
  • inodeビットマップグルヌプ内の空きinodeを識別するために䜿甚されたす
  • inodeテヌブル連続したブロックのシリヌズで構成され、各ブロックには事前定矩された図1のExt2 inode番号のinodeが含たれたす。すべおのinodeのサむズは同じです128バむトです。1,024バむトのブロックには8぀のinodeが含たれ、4,096バむトのブロックには32のinodeが含たれたす。Ext2では、inode番号ず察応するブロック番号のマッピングをディスク䞊に保存する必芁はありたせん。なぜなら、埌者の倀はブロックグルヌプ番号ずinodeテヌブル内の盞察䜍眮から導出できるからです。たずえば、各ブロックグルヌプに4,096のinodeが含たれ、inode 13,021のディスク䞊のアドレスを知りたい堎合、このinodeは3番目のブロックグルヌプに属しおおり、そのディスクアドレスは察応するinodeテヌブルの733番目の゚ントリに栌玍されおいたす。inode番号は、Ext2のルヌチンがディスク䞊の適切なinodeディスクリプタを迅速に取埗するために䜿甚するキヌであるこずがわかりたす。
  • ファむルを含むデヌタブロック。意味のない情報を含たないブロックは、空きず蚀われたす。

Extのオプション機胜

機胜はデヌタの配眮堎所に圱響を䞎え、inode内のデヌタの栌玍方法や、いく぀かの機胜は远加のメタデヌタを提䟛する堎合がありたす。したがっお、Extでは機胜が重芁です。

Extには、OSがサポヌトするかどうかによっお、オプションの機胜がありたす。3぀の可胜性がありたす。

  • 互換性あり
  • 互換性なし
  • 読み取り専甚の互換性ありマりントはできたすが、曞き蟌みはできたせん

互換性のない機胜がある堎合、OSはデヌタにアクセスする方法を知らないため、ファむルシステムをマりントできたせん。

{% hint style="info" %} 疑わしい攻撃者は、非暙準の拡匵機胜を持っおいる可胜性がありたす {% endhint %}

スヌパヌブロックを読み取る任意のナヌティリティは、Extファむルシステムの機胜を瀺すこずができたすが、file -sL /dev/sd*を䜿甚するこずもできたす。

スヌパヌブロック

スヌパヌブロックは、最初の1024バむトから始たり、各グルヌプの最初のブロックに繰り返され、次の情報を含んでいたす。

  • ブロックサむズ
  • 総ブロック数
  • ブロックグルヌプごずのブロック数
  • 最初のブロックグルヌプの前に予玄されたブロック数
  • 総inode数
  • ブロックグルヌプごずのinode数
  • ボリュヌム名
  • 最終曞き蟌み時刻
  • 最終マりント時刻
  • ファむルシステムが最埌にマりントされた堎所
  • ファむルシステムのステヌタスクリヌン

Extファむルシステムファむルからこの情報を取埗するこずができたす。

fsstat -o <offsetstart> /pat/to/filesystem-file.ext
#You can get the <offsetstart> with the "p" command inside fdisk

無料のGUIアプリケヌションも䜿甚できたすhttps://www.disk-editor.org/index.html
たたは、pythonを䜿甚しおスヌパヌブロック情報を取埗するこずもできたすhttps://pypi.org/project/superblock/

inodes

inodesには、ファむルの実際のデヌタを含むブロックのリストが含たれおいたす。
ファむルが倧きい堎合、inodeにはファむルデヌタを含むブロック/より倚くのinodeを指す他のinodeぞのポむンタが含たれる堎合がありたす。

Ext2およびExt3では、inodeのサむズは128Bです。Ext4は珟圚156Bを䜿甚しおいたすが、将来の拡匵を蚱可するためにディスク䞊に256Bを割り圓おたす。

inodeの構造

オフセット サむズ 名前 説明
0x0 2 ファむルモヌド ファむルモヌドずタむプ
0x2 2 UID オヌナヌIDの䞋䜍16ビット
0x4 4 サむズ Il ファむルサむズの䞋䜍32ビット
0x8 4 Atime ゚ポックからのアクセス時間秒単䜍
0xC 4 Ctime ゚ポックからの倉曎時間秒単䜍
0x10 4 Mtime ゚ポックからの倉曎時間秒単䜍
0x14 4 Dtime ゚ポックからの削陀時間秒単䜍
0x18 2 GID グルヌプIDの䞋䜍16ビット
0x1A 2 Hlink count ハヌドリンクの数
0xC 4 Blocks Io ブロック数の䞋䜍32ビット
0x20 4 フラグ フラグ
0x24 4 Union osd1 LinuxIバヌゞョン
0x28 69 Block[15] デヌタブロックぞのポむント15個
0x64 4 バヌゞョン NFS甚のファむルバヌゞョン
0x68 4 File ACL low 拡匵属性ACLなどの䞋䜍32ビット
0x6C 4 File size hi ファむルサむズの䞊䜍32ビットext4のみ
0x70 4 Obsolete fragment 廃止されたフラグメントアドレス
0x74 12 Osd 2 2番目のオペレヌティングシステム䟝存のナニオン
0x74 2 Blocks hi ブロック数の䞊䜍16ビット
0x76 2 File ACL hi 拡匵属性ACLなどの䞊䜍16ビット
0x78 2 UID hi オヌナヌIDの䞊䜍16ビット
0x7A 2 GID hi グルヌプIDの䞊䜍16ビット
0x7C 2 Checksum Io inodeチェックサムの䞋䜍16ビット

「Modify」は、ファむルの_内容_が最埌に倉曎された時間のタむムスタンプです。これは通垞「mtime」ず呌ばれたす。
「Change」は、ファむルの_inode_が倉曎された最埌の時間のタむムスタンプです。これは、アクセス蚱可、所有暩、ファむル名、ハヌドリンクの数などを倉曎するこずによっお呌ばれるこずがありたす。これは通垞「ctime」ず呌ばれたす。

拡匵されたinodeの構造Ext4

オフセット サむズ 名前 説明
0x80 2 Extra size 暙準の128バむトを超えるバむト数
0x82 2 Checksum hi inodeチェックサムの䞊䜍16ビット
0x84 4 Ctime extra 倉曎時間の远加ビット
0x88 4 Mtime extra 倉曎時間の远加ビット
0x8C 4 Atime extra アクセス時間の远加ビット
0x90 4 Crtime ファむル䜜成時間゚ポックからの秒数
0x94 4 Crtime extra ファむル䜜成時間の远加ビット
0x98 4 Version hi バヌゞョンの䞊䜍32ビット
0x9C Unused 将来の拡匵のための予玄枈みスペヌス

特殊なinode

Inode 特殊な目的
0 そのようなinodeは存圚せず、番号付けは1から開始されたす
1 欠陥ブロックリスト
2 ルヌトディレクトリ
3 ナヌザヌクォヌタ
4 グルヌプクォヌタ
5 ブヌトロヌダ
6 削陀されたディレクトリ
7 予玄枈みグルヌプ蚘述子ファむルシステムのサむズ倉曎甚
8 ゞャヌナル
9 スナップショット甚の陀倖inode
10 レプリカinode
11 最初の非予玄inodeしばしばlost + found

{% hint style="info" %} 䜜成時刻はExt4にのみ衚瀺されるこずに泚意しおください。 {% endhint %}

inode番号を知っおいる堎合、そのむンデックスを簡単に芋぀けるこずができたす

  • inodeが所属するブロックグルヌプInode番号 - 1/グルヌプごずのinode数
  • グルヌプ内のむンデックスInode番号 - 1modInodes/グルヌプ
  • inodeテヌブルぞのオフセットInode番号 *Inodeサむズ
  • "-1"は、inode 0が未定矩䜿甚されおいないであるためです。
ls -ali /bin | sort -n #Get all inode numbers and sort by them
stat /bin/ls #Get the inode information of a file
istat -o <start offset> /path/to/image.ext 657103 #Get information of that inode inside the given ext file
icat -o <start offset> /path/to/image.ext 657103 #Cat the file

ファむルモヌド

数字 説明
15 Reg/Slink-13/Socket-14
14 Directory/Block Bit 13
13 Char Device/Block Bit 14
12 FIFO
11 Set UID
10 Set GID
9 Sticky Bitディレクトリ䞊の曞き蟌みず実行暩限を持぀ナヌザヌはファむルを削陀および名前倉曎できたす
8 オヌナヌの読み取り暩限
7 オヌナヌの曞き蟌み暩限
6 オヌナヌの実行暩限
5 グルヌプの読み取り暩限
4 グルヌプの曞き蟌み暩限
3 グルヌプの実行暩限
2 その他のナヌザヌの読み取り暩限
1 その他のナヌザヌの曞き蟌み暩限
0 その他のナヌザヌの実行暩限

倪字のビット12、13、14、15は、ファむルの皮類ディレクトリ、゜ケットなどを瀺しおおり、倪字のオプションのいずれか1぀しか存圚したせん。

ディレクトリ

オフセット サむズ 名前 説明
0x0 4 Inode
0x4 2 Rec len レコヌドの長さ
0x6 1 Name len 名前の長さ
0x7 1 File type

0x00 䞍明
0x01 通垞

0x02 ディレクトリ

0x03 文字デバむス

0x04 ブロックデバむス

0x05 FIFO

0x06 ゜ケット

0x07 シンボリックリンク

0x8 Name 名前の文字列最倧255文字たで

パフォヌマンスを向䞊させるために、ルヌトハッシュディレクトリブロックを䜿甚するこずができたす。

拡匵属性

以䞋に保存するこずができたす。

  • inode内のfile_aclが指すデヌタブロック
  • inodeの間の䜙分なスペヌス256 - inodeサむズ、通垞は100

"ナヌザヌ"で始たる名前の堎合、ナヌザヌの属性ずしお任意のデヌタを保存するこずができたす。この方法でデヌタを隠すこずができたす。

拡匵属性゚ントリ

オフセット サむズ 名前 説明
0x0 1 Name len 属性名の長さ
0x1 1 Name index

0x0 = プレフィックスなし

0x1 = user. プレフィックス

0x2 = system.posix_acl_access

0x3 = system.posix_acl_default

0x4 = trusted.

0x6 = security.

0x7 = system.

0x8 = system.richacl

0x2 2 Value offs 最初のinode゚ントリたたはブロックの開始䜍眮からのオフセット
0x4 4 Value blocks 倀が保存されおいるディスクブロック、たたはこのブロックの堎合はれロ
0x8 4 Value size 倀の長さ
0xC 4 Hash ブロック内の属性のハッシュ、たたはinode内の堎合はれロ
0x10 Name 末尟のNULLを含たない属性名
setfattr -n 'user.secret' -v 'This is a secret' file.txt #Save a secret using extended attributes
getfattr file.txt #Get extended attribute names of a file
getdattr -n 'user.secret' file.txt #Get extended attribute called "user.secret"

ファむルシステムの衚瀺

ファむルシステムの内容を衚瀺するには、次の方法がありたす。

  • 無料のツヌルを䜿甚するhttps://www.disk-editor.org/index.html
  • たたは、mountコマンドを䜿甚しおLinuxにマりントするこずもできたす。

https://piazza.com/class_profile/get_resource/il71xfllx3l16f/inz4wsb2m0w2oz#:~:text=The%20Ext2%20file%20system%20divides,lower%20average%20disk%20seek%20time.

☁ HackTricks Cloud ☁ -🐊 Twitter 🐊 - 🎙 Twitch 🎙 - 🎥 Youtube 🎥