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

19 KiB
Raw Blame History

Partycje/Systemy plików/Wycinanie

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Partycje

Dysk twardy lub dysk SSD może zawierać różne partycje w celu fizycznego oddzielenia danych.
Minimalna jednostka dysku to sektor (zazwyczaj składający się z 512B). Dlatego każda partycja musi mieć wielokrotność tej wielkości.

MBR (Master Boot Record)

Znajduje się w pierwszym sektorze dysku po 446B kodu rozruchowego. Ten sektor jest niezbędny, aby wskazać komputerowi, co i skąd powinna być montowana partycja.
Pozwala na 4 partycje (najwyżej tylko 1 może być aktywna/rozruchowa). Jeśli jednak potrzebujesz więcej partycji, możesz użyć partycji rozszerzonych. Ostatnim bajtem tego pierwszego sektora jest sygnatura rekordu rozruchowego 0x55AA. Tylko jedna partycja może być oznaczona jako aktywna.
MBR pozwala na maks. 2,2 TB.

Od bajtów 440 do 443 MBR można znaleźć Sygnaturę Dysku Windows (jeśli jest używany system Windows). Litera logiczna dysku twardego zależy od Sygnatury Dysku Windows. Zmiana tej sygnatury może uniemożliwić uruchomienie systemu Windows (narzędzie: Active Disk Editor).

Format

Offset Dł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

Offset Długość Element
0 (0x00) 1 (0x01) Flaga aktywna (0x80 = rozruchowa)
1 (0x01) 1 (0x01) Początkowy głowica
2 (0x02) 1 (0x01) Początkowy sektor (bity 0-5); wyższe bity cylindra (6- 7)
3 (0x03) 1 (0x01) Najmłodsze 8 bitów cylindra początkowego
4 (0x04) 1 (0x01) Kod typu partycji (0x83 = Linux)
5 (0x05) 1 (0x01) Końcowa głowica
6 (0x06) 1 (0x01) Końcowy sektor (bity 0-5); wyższe bity cylindra (6- 7)
7 (0x07) 1 (0x01) Najmłodsze 8 bitów cylindra końcowego
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ć przesunięcie początkowe (możesz użyć fdisk i polecenia p)

Następnie użyj następującego kodu

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

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

GPT (Tabela partycji GUID)

Tabela partycji GUID, znana jako GPT, cieszy się popularnością ze względu na swoje ulepszone możliwości w porównaniu z MBR (Master Boot Record). Wyróżnia się ona globalnie unikalnym identyfikatorem partycji, GPT wyróżnia się kilkoma cechami:

  • 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.
  • Ograniczenia partycji: GPT obsługuje do 128 partycji w systemach Windows i pomieści do 9,4ZB danych.
  • Nazwy partycji: Oferuje możliwość nadawania partycjom nazw do 36 znaków Unicode.

Odporność i odzyskiwanie danych:

  • Redundancja: W przeciwieństwie do MBR, GPT nie ogranicza partycjonowania i danych rozruchowych do jednego miejsca. Powiela te dane na dysku, poprawiając integralność i odporność danych.
  • Sprawdzanie cyklicznej sumy kontrolnej (CRC): GPT stosuje CRC w celu zapewnienia integralności danych. Aktywnie monitoruje uszkodzenia danych, a gdy je wykryje, GPT próbuje odzyskać uszkodzone dane z innej lokalizacji na dysku.

Ochronny MBR (LBA0):

  • GPT zachowuje kompatybilność wsteczną poprzez ochronny MBR. Ta funkcja znajduje się w przestrzeni dziedzicznej MBR, ale zaprojektowana jest tak, aby zapobiec starszym narzędziom opartym na MBR przed błędnym nadpisywaniem dysków sformatowanych w formacie GPT, chroniąc tym samym integralność danych na dyskach sformatowanych w formacie GPT.

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

Hybrydowy MBR (LBA 0 + GPT)

Z Wikipedii

W systemach operacyjnych obsługujących rozruch oparty na GPT poprzez usługi BIOS zamiast EFI, pierwszy sektor może również być nadal używany do przechowywania pierwszego etapu kodu ładowania rozpoznającego partycje GPT. Ładowacz w MBR nie powinien zakładać rozmiaru sektora 512 bajtów.

Nagłówek tabeli partycji (LBA 1)

Z Wikipedii

Nagłówek tabeli partycji definiuje bloki użyteczne na dysku. Określa również liczbę i rozmiar wpisów partycji, które tworzą tabelę partycji (przesunięcia 80 i 84 w tabeli).

Przesunięcie Długość Zawartość
0 (0x00) 8 bajtów Sygnatura ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h lub 0x5452415020494645ULL na małych maszynach endian)
8 (0x08) 4 bajty Wersja 1.0 (00h 00h 01h 00h) dla UEFI 2.8
12 (0x0C) 4 bajty Rozmiar nagłówka w małym endianie (w bajtach, zwykle 5Ch 00h 00h 00h lub 92 bajty)
16 (0x10) 4 bajty CRC32 nagłówka (przesunięcie +0 do rozmiaru nagłówka) w małym endianie, z polem zerowanym podczas obliczeń
20 (0x14) 4 bajty Zarezerwowane; musi być zerem
24 (0x18) 8 bajtów Bieżące LBA (lokalizacja tego kopii nagłówka)
32 (0x20) 8 bajtów LBA kopii zapasowej (lokalizacja innej kopii nagłówka)
40 (0x28) 8 bajtów Pierwsze użyteczne LBA dla partycji (ostatnie LBA pierwszej 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 Początkowe LBA tablicy wpisów partycji (zawsze 2 w kopii podstawowej)
80 (0x50) 4 bajty Liczba wpisów partycji w tablicy
84 (0x54) 4 bajty Rozmiar pojedynczego wpisu partycji (zwykle 80h lub 128)
88 (0x58) 4 bajty CRC32 tablicy wpisów partycji w małym endianie
92 (0x5C) * Zarezerwowane; muszą być zerami dla reszty bloku (420 bajtów dla rozmiaru sektora 512 bajtów; ale może być więcej przy większych rozmiarach sektora)

Wpisy partycji (LBA 233)

Format wpisu partycji GUID
Przesunięcie Długość Zawartość
0 (0x00) 16 bajtów GUID typu partycji (mieszany endian)
16 (0x10) 16 bajtów Unikalny GUID partycji (mieszany endian)
32 (0x20) 8 bajtów Pierwsze LBA (mały 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 kodu)

Typy partycji

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

Inspekcja

Po zamontowaniu obrazu do analizy z ArsenalImageMounter, można zbadać pierwszy sektor za pomocą narzędzia Windows Active Disk Editor. Na poniższym obrazie wykryto MBR w sektorze 0 i zinterpretowano:

Jeśli byłoby to tabela GPT zamiast MBR, powinna pojawić się sygnatura 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) został zaprojektowany wokół swojego głównego komponentu, tabeli alokacji plików, umieszczonej na początku woluminu. Ten system zabezpiecza dane, utrzymując dwie kopie tabeli, zapewniając integralność danych nawet w przypadku uszkodzenia jednej z nich. Tabela, wraz z folderem głównym, musi znajdować się w stałym miejscu, kluczowym dla procesu uruchamiania systemu.

Podstawową jednostką przechowywania systemu plików jest klaster, zazwyczaj 512B, składający się z wielu sektorów. FAT ewoluował poprzez różne wersje:

  • FAT12, obsługujący adresy klastrów 12-bitowe i obsługujący do 4078 klastrów (4084 z UNIX).
  • FAT16, rozszerzający się do adresów 16-bitowych, co pozwala na pomieszczenie do 65 517 klastrów.
  • FAT32, dalsze zaawansowanie z adresami 32-bitowymi, pozwalające na imponujące 268 435 456 klastrów na wolumin.

Znaczącym ograniczeniem we wszystkich wersjach FAT jest maksymalny rozmiar pliku 4GB, narzucony przez pole 32-bitowe używane do przechowywania rozmiaru pliku.

Kluczowe składniki 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 początkowy klaster pliku)
  • Rozmiar pliku

EXT

Ext2 jest najczęstszym systemem plików dla partycji bez dziennikowania (partycje, które się nie zmieniają zbyt często), takich jak partycja rozruchowa. Ext3/4z dziennikowaniem i zazwyczaj są używane dla pozostałych partycji.

Metadane

Niektóre pliki zawierają metadane. Informacje te dotyczą zawartości pliku, co czasami może być interesujące dla analityka, ponieważ w zależności od typu pliku może zawierać informacje takie jak:

  • Tytuł
  • Użyta wersja MS Office
  • Autor
  • Daty utworzenia i ostatniej modyfikacji
  • Model aparatu fotograficznego
  • 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

Zalogowane usunięte pliki

Jak już widziano, istnieje kilka miejsc, gdzie plik jest nadal zapisany po "usunięciu". Wynika to z faktu, że zazwyczaj usunięcie pliku z systemu plików oznacza go jako usunięty, ale dane nie są dotykane. Następnie można sprawdzić rejestracje plików (takie jak MFT) i odnaleźć usunięte pliki.

Ponadto system operacyjny zazwyczaj zapisuje wiele informacji o zmianach w systemie plików i kopie zapasowe, więc można spróbować ich użyć do odzyskania pliku lub jak największej ilości informacji.

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

Wycinanie plików

Wycinanie plików to technika, która próbuje znaleźć pliki w dużej ilości danych. Istnieją 3 główne sposoby działania narzędzi tego typu: Na podstawie nagłówków i stopów typów plików, na podstawie struktur typów plików i na podstawie samej zawartości.

Należy zauważyć, że ta technika nie działa do odzyskiwania fragmentowanych plików. Jeśli plik nie jest przechowywany w sąsiadujących sektorach, ta technika nie będzie w stanie go odnaleźć lub przynajmniej jego części.

Istnieje kilka narzędzi, które można użyć do wycinania plików, wskazując typy plików, których chcesz szukać.

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

Wycinanie strumieni danych

Wycinanie strumieni danych jest podobne do wycinania 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.

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

Bezpieczne usuwanie

Oczywiście istnieją sposoby "bezpiecznego" usuwania plików i części logów o nich. Na przykład można nadpisać zawartość pliku danymi bezużytecznymi kilkakrotnie, a następnie usunąć logi z $MFT i $LOGFILE dotyczące pliku, oraz usunąć kopie zapasowe woluminu.
Możesz zauważyć, że nawet wykonując tę czynność, mogą istnieć inne miejsca, gdzie istnienie pliku jest nadal rejestrowane, co jest prawdą, a częścią pracy profesjonalisty ds. informatyki śledczej jest ich odnalezienie.

Odnośniki