Partycje/Systemy plików/Carving

Reading time: 10 minutes

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

Partycje

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.

MBR (master Boot Record)

Jest przydzielany w pierwszym sektorze dysku po 446B kodu rozruchowego. Ten sektor jest niezbędny, aby wskazać komputerowi, co i skąd powinno być zamontowane.
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.

Od bajtów 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 systemu Windows (narzędzie: Active Disk Editor).

Format

OffsetDługośćElement
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

OffsetDługośćElement
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)Cylindr 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)Cylindr 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

bash
#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 (Logical block addressing)

Logical block addressing (LBA) to powszechny schemat używany do określania lokalizacji bloków danych przechowywanych na urządzeniach pamięci masowej komputerów, zazwyczaj w systemach pamięci wtórnej, takich jak dyski twarde. LBA to szczególnie prosty liniowy schemat adresowania; bloki są zlokalizowane za pomocą indeksu całkowitego, przy czym pierwszy blok to LBA 0, drugi LBA 1, i tak dalej.

GPT (GUID Partition Table)

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.

https://upload.wikimedia.org/wikipedia/commons/thumb/0/07/GUID_Partition_Table_Scheme.svg/800px-GUID_Partition_Table_Scheme.svg.png

Hybrid MBR (LBA 0 + GPT)

Z Wikipedii

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)

Z Wikipedii

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).

OffsetDługośćZawartość
0 (0x00)8 bajtówPodpis ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h lub 0x5452415020494645ULL na maszynach little-endian)
8 (0x08)4 bajtyWersja 1.0 (00h 00h 01h 00h) dla UEFI 2.8
12 (0x0C)4 bajtyRozmiar nagłówka w little endian (w bajtach, zazwyczaj 5Ch 00h 00h 00h lub 92 bajty)
16 (0x10)4 bajtyCRC32 nagłówka (offset +0 do rozmiaru nagłówka) w little endian, z tym polem wyzerowanym podczas obliczeń
20 (0x14)4 bajtyZarezerwowane; musi być zerowe
24 (0x18)8 bajtówBieżące LBA (lokalizacja tej kopii nagłówka)
32 (0x20)8 bajtówKopia zapasowa LBA (lokalizacja drugiej kopii nagłówka)
40 (0x28)8 bajtówPierwsze użyteczne LBA dla partycji (ostatnie LBA głównej tabeli partycji + 1)
48 (0x30)8 bajtówOstatnie użyteczne LBA (pierwsze LBA drugiej tabeli partycji − 1)
56 (0x38)16 bajtówGUID dysku w mieszanym endianie
72 (0x48)8 bajtówPoczątkowe LBA tablicy wpisów partycji (zawsze 2 w kopii głównej)
80 (0x50)4 bajtyLiczba wpisów partycji w tablicy
84 (0x54)4 bajtyRozmiar pojedynczego wpisu partycji (zazwyczaj 80h lub 128)
88 (0x58)4 bajtyCRC32 tablicy wpisów partycji w little endian
92 (0x5C)*Zarezerwowane; musi być zerami dla reszty 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
OffsetDługośćZawartość
0 (0x00)16 bajtówTyp GUID partycji (mieszany endian)
16 (0x10)16 bajtówUnikalny GUID partycji (mieszany endian)
32 (0x20)8 bajtówPierwsze LBA (little endian)
40 (0x28)8 bajtówOstatnie LBA (włącznie, zazwyczaj nieparzyste)
48 (0x30)8 bajtówFlagi atrybutów (np. bit 60 oznacza tylko do odczytu)
56 (0x38)72 bajtyNazwa partycji (36 UTF-16LE jednostek kodowych)

Typy partycji

Więcej typów partycji w https://en.wikipedia.org/wiki/GUID_Partition_Table

Inspekcja

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).

Systemy plików

Lista systemów plików 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

System plików FAT (File Allocation Table) jest zaprojektowany wokół swojego kluczowego 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ąc 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

EXT

Ext2 to najczęściej używany system plików dla partycji bez dziennika (partycji, które nie zmieniają się zbyt często) jak partycja rozruchowa. Ext3/4z dziennikiem i są zazwyczaj używane dla pozostałych partycji.

Metadane

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.

Odzyskiwanie usuniętych plików

Zarejestrowane usunięte pliki

Jak wcześniej wspomniano, istnieje kilka miejsc, w których plik jest nadal zapisany po tym, jak został "usunięty". Dzieje się tak, ponieważ zazwyczaj usunięcie pliku z systemu plików po prostu oznacza go jako usunięty, ale dane nie są dotykane. W związku z tym 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.

{{#ref}} file-data-carving-recovery-tools.md {{#endref}}

Carving plików

File 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 stopek 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ć.

{{#ref}} file-data-carving-recovery-tools.md {{#endref}}

Carving strumienia danych C

Carving strumienia 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.

{{#ref}} file-data-carving-recovery-tools.md {{#endref}}

Bezpieczne usuwanie

Oczywiś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.

Referencje

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks