Partitions/File Systems/Carving
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Dysk twardy lub dysk SSD może zawierać różne partycje w celu fizycznego oddzielenia danych. Minimalną jednostką dysku jest sektor (zwykle składający się z 512B). Zatem rozmiar każdej partycji musi być wielokrotnością tego rozmiaru.
Jest przydzielony w pierwszym sektorze dysku po 446B kodu rozruchowego. Ten sektor jest niezbędny, aby wskazać PC, co i skąd powinno być zamontowane jako partycja. Pozwala na maksymalnie 4 partycje (najwyżej tylko 1 może być aktywna/rozruchowa). Jednak jeśli potrzebujesz więcej partycji, możesz użyć partycji rozszerzonej. Ostatni bajt tego pierwszego sektora to sygnatura rekordu rozruchowego 0x55AA. Tylko jedna partycja może być oznaczona jako aktywna. MBR pozwala na maks. 2.2TB.
W bajtach 440 do 443 MBR możesz znaleźć Sygnaturę Dysku Windows (jeśli używany jest Windows). Litera logicznego dysku twardego zależy od Sygnatury Dysku Windows. Zmiana tej sygnatury może uniemożliwić uruchomienie Windows (narzędzie: Active Disk Editor).
Format
Offset | Length | Item |
---|---|---|
0 (0x00) | 446(0x1BE) | Kod rozruchowy |
446 (0x1BE) | 16 (0x10) | Pierwsza partycja |
462 (0x1CE) | 16 (0x10) | Druga partycja |
478 (0x1DE) | 16 (0x10) | Trzecia partycja |
494 (0x1EE) | 16 (0x10) | Czwarta partycja |
510 (0x1FE) | 2 (0x2) | Sygnatura 0x55 0xAA |
Format rekordu partycji
Offset | Length | Item |
---|---|---|
0 (0x00) | 1 (0x01) | Flaga aktywności (0x80 = rozruchowa) |
1 (0x01) | 1 (0x01) | Głowica startowa |
2 (0x02) | 1 (0x01) | Sektor startowy (bity 0-5); wyższe bity cylindra (6- 7) |
3 (0x03) | 1 (0x01) | Cylinder startowy najniższe 8 bitów |
4 (0x04) | 1 (0x01) | Kod typu partycji (0x83 = Linux) |
5 (0x05) | 1 (0x01) | Głowica końcowa |
6 (0x06) | 1 (0x01) | Sektor końcowy (bity 0-5); wyższe bity cylindra (6- 7) |
7 (0x07) | 1 (0x01) | Cylinder końcowy najniższe 8 bitów |
8 (0x08) | 4 (0x04) | Sektory poprzedzające partycję (little endian) |
12 (0x0C) | 4 (0x04) | Sektory w partycji |
Aby zamontować MBR w systemie Linux, najpierw musisz uzyskać offset startowy (możesz użyć fdisk
i polecenia p
)
A następnie użyj następującego kodu
LBA (Logical block addressing)
Logical block addressing (LBA) to powszechnie stosowany schemat do określania lokalizacji bloków danych przechowywanych na urządzeniach pamięci komputerowej, zazwyczaj w systemach pamięci wtórnej, takich jak dyski twarde. LBA jest szczególnie prostym liniowym schematem adresowania; bloki są zlokalizowane za pomocą indeksu całkowitego, przy czym pierwszy blok to LBA 0, drugi LBA 1, i tak dalej.
Tabela partycji GUID, znana jako GPT, jest preferowana ze względu na swoje ulepszone możliwości w porównaniu do MBR (Master Boot Record). Wyróżnia się globalnie unikalnym identyfikatorem dla partycji, GPT wyróżnia się w kilku aspektach:
Lokalizacja i rozmiar: Zarówno GPT, jak i MBR zaczynają się od sektora 0. Jednak GPT działa na 64 bitach, w przeciwieństwie do 32 bitów MBR.
Limity partycji: GPT obsługuje do 128 partycji w systemach Windows i pomieści do 9,4ZB danych.
Nazwy partycji: Oferuje możliwość nadawania nazw partycjom z maksymalnie 36 znakami Unicode.
Odporność danych i odzyskiwanie:
Redundancja: W przeciwieństwie do MBR, GPT nie ogranicza partycjonowania i danych rozruchowych do jednego miejsca. Replikuje te dane w całym dysku, co zwiększa integralność danych i odporność.
Cyclic Redundancy Check (CRC): GPT stosuje CRC, aby zapewnić integralność danych. Aktywnie monitoruje uszkodzenia danych, a po ich wykryciu GPT próbuje odzyskać uszkodzone dane z innej lokalizacji na dysku.
Ochronny MBR (LBA0):
GPT utrzymuje zgodność wsteczną poprzez ochronny MBR. Ta funkcja znajduje się w przestrzeni MBR, ale jest zaprojektowana, aby zapobiec przypadkowemu nadpisaniu dysków GPT przez starsze narzędzia oparte na MBR, co chroni integralność danych na dyskach sformatowanych w GPT.
Hybrid MBR (LBA 0 + GPT)
W systemach operacyjnych, które obsługują rozruch oparty na GPT przez usługi BIOS zamiast EFI, pierwszy sektor może być również używany do przechowywania pierwszej fazy kodu bootloadera, ale zmodyfikowanego w celu rozpoznania partycji GPT. Bootloader w MBR nie może zakładać rozmiaru sektora wynoszącego 512 bajtów.
Nagłówek tabeli partycji (LBA 1)
Nagłówek tabeli partycji definiuje użyteczne bloki na dysku. Definiuje również liczbę i rozmiar wpisów partycji, które tworzą tabelę partycji (offsety 80 i 84 w tabeli).
Offset | Długość | Zawartość |
---|---|---|
0 (0x00) | 8 bajtów | |
8 (0x08) | 4 bajty | Wersja 1.0 (00h 00h 01h 00h) dla UEFI 2.8 |
12 (0x0C) | 4 bajty | Rozmiar nagłówka w little endian (w bajtach, zazwyczaj 5Ch 00h 00h 00h lub 92 bajty) |
16 (0x10) | 4 bajty | CRC32 nagłówka (offset +0 do rozmiaru nagłówka) w little endian, z tym polem wyzerowanym podczas obliczeń |
20 (0x14) | 4 bajty | Zarezerwowane; musi być zerowe |
24 (0x18) | 8 bajtów | Bieżące LBA (lokalizacja tej kopii nagłówka) |
32 (0x20) | 8 bajtów | Kopia zapasowa LBA (lokalizacja drugiej kopii nagłówka) |
40 (0x28) | 8 bajtów | Pierwsze użyteczne LBA dla partycji (ostatnie LBA głównej tabeli partycji + 1) |
48 (0x30) | 8 bajtów | Ostatnie użyteczne LBA (pierwsze LBA drugiej tabeli partycji − 1) |
56 (0x38) | 16 bajtów | GUID dysku w mieszanym endianie |
72 (0x48) | 8 bajtów | Rozpoczęcie LBA tablicy wpisów partycji (zawsze 2 w kopii głównej) |
80 (0x50) | 4 bajty | Liczba wpisów partycji w tablicy |
84 (0x54) | 4 bajty | Rozmiar pojedynczego wpisu partycji (zazwyczaj 80h lub 128) |
88 (0x58) | 4 bajty | CRC32 tablicy wpisów partycji w little endian |
92 (0x5C) | * | Zarezerwowane; musi być zerami przez resztę bloku (420 bajtów dla rozmiaru sektora 512 bajtów; ale może być więcej przy większych rozmiarach sektorów) |
Wpisy partycji (LBA 2–33)
Format wpisu partycji GUID | ||
---|---|---|
Offset | Długość | Zawartość |
0 (0x00) | 16 bajtów | Typ GUID partycji (mieszany endian) |
16 (0x10) | 16 bajtów | Unikalny GUID partycji (mieszany endian) |
32 (0x20) | 8 bajtów | Pierwsze LBA (little endian) |
40 (0x28) | 8 bajtów | Ostatnie LBA (włącznie, zazwyczaj nieparzyste) |
48 (0x30) | 8 bajtów | Flagi atrybutów (np. bit 60 oznacza tylko do odczytu) |
56 (0x38) | 72 bajty | Nazwa partycji (36 UTF-16LE jednostek kodowych) |
Typy partycji
Więcej typów partycji w https://en.wikipedia.org/wiki/GUID_Partition_Table
Po zamontowaniu obrazu forensycznego za pomocą ArsenalImageMounter, możesz zbadać pierwszy sektor za pomocą narzędzia Windows Active Disk Editor. Na poniższym obrazie wykryto MBR w sektorze 0 i zinterpretowano:
Gdyby to była tabela GPT zamiast MBR, powinien pojawić się podpis EFI PART w sektorze 1 (który na poprzednim obrazie jest pusty).
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
System plików FAT (File Allocation Table) jest zaprojektowany wokół swojego podstawowego komponentu, tabeli alokacji plików, umieszczonej na początku woluminu. System ten chroni dane, utrzymując dwie kopie tabeli, zapewniając integralność danych, nawet jeśli jedna z nich ulegnie uszkodzeniu. Tabela, wraz z folderem głównym, musi znajdować się w stałej lokalizacji, co jest kluczowe dla procesu uruchamiania systemu.
Podstawową jednostką przechowywania w systemie plików jest klaster, zazwyczaj 512B, składający się z wielu sektorów. FAT ewoluował przez wersje:
FAT12, obsługujący 12-bitowe adresy klastrów i obsługujący do 4078 klastrów (4084 z UNIX).
FAT16, rozwijający się do 16-bitowych adresów, co pozwala na obsługę do 65,517 klastrów.
FAT32, dalej rozwijający się z 32-bitowymi adresami, pozwalający na imponujące 268,435,456 klastrów na wolumin.
Znaczącym ograniczeniem we wszystkich wersjach FAT jest maksymalny rozmiar pliku wynoszący 4GB, narzucony przez 32-bitowe pole używane do przechowywania rozmiaru pliku.
Kluczowe komponenty katalogu głównego, szczególnie dla FAT12 i FAT16, obejmują:
Nazwa pliku/folderu (do 8 znaków)
Atrybuty
Daty utworzenia, modyfikacji i ostatniego dostępu
Adres tabeli FAT (wskazujący na pierwszy klaster pliku)
Rozmiar pliku
Ext2 to najczęściej stosowany system plików dla partycji bez dziennika (partycji, które nie zmieniają się zbyt często) jak partycja rozruchowa. Ext3/4 są z dziennikiem i są zazwyczaj używane dla pozostałych partycji.
Niektóre pliki zawierają metadane. Informacje te dotyczą zawartości pliku, które czasami mogą być interesujące dla analityka, ponieważ w zależności od typu pliku mogą zawierać informacje takie jak:
Tytuł
Wersja MS Office używana
Autor
Daty utworzenia i ostatniej modyfikacji
Model aparatu
Współrzędne GPS
Informacje o obrazie
Możesz użyć narzędzi takich jak exiftool i Metadiver do uzyskania metadanych pliku.
Jak wcześniej wspomniano, istnieje kilka miejsc, w których plik jest nadal zapisany po jego "usunięciu". Dzieje się tak, ponieważ zazwyczaj usunięcie pliku z systemu plików po prostu oznacza go jako usunięty, ale dane nie są dotykane. Wtedy możliwe jest zbadanie rejestrów plików (takich jak MFT) i znalezienie usuniętych plików.
Ponadto system operacyjny zazwyczaj zapisuje wiele informacji o zmianach w systemie plików i kopiach zapasowych, więc możliwe jest próbowanie ich użycia do odzyskania pliku lub jak największej ilości informacji.
File/Data Carving & Recovery ToolsFile carving to technika, która próbuje znaleźć pliki w masie danych. Istnieją 3 główne sposoby, w jakie działają takie narzędzia: Na podstawie nagłówków i stóp typów plików, na podstawie struktur typów plików oraz na podstawie samej zawartości.
Należy zauważyć, że ta technika nie działa na odzyskiwanie fragmentowanych plików. Jeśli plik nie jest przechowywany w sąsiadujących sektorach, to ta technika nie będzie w stanie go znaleźć lub przynajmniej jego części.
Istnieje wiele narzędzi, które możesz użyć do carvingu plików, wskazując typy plików, które chcesz wyszukiwać.
File/Data Carving & Recovery ToolsCarving strumieni danych jest podobny do carvingu plików, ale zamiast szukać kompletnych plików, szuka interesujących fragmentów informacji. Na przykład, zamiast szukać kompletnego pliku zawierającego zarejestrowane adresy URL, ta technika będzie szukać adresów URL.
File/Data Carving & Recovery ToolsOczywiście istnieją sposoby na "bezpieczne" usunięcie plików i części logów o nich. Na przykład, możliwe jest nadpisanie zawartości pliku danymi śmieciowymi kilka razy, a następnie usunięcie logów z $MFT i $LOGFILE dotyczących pliku oraz usunięcie kopii cieni woluminu. Możesz zauważyć, że nawet wykonując tę akcję, mogą istnieć inne części, w których istnienie pliku jest nadal zarejestrowane, i to prawda, a częścią pracy profesjonalisty w dziedzinie forensyki jest ich znalezienie.
iHackLabs Certified Digital Forensics Windows
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)