NTFS – podstawy

FAT jest dobrym przykładem systemu plików. Pokazuje jaką podstawową funkcjonalność system plików powinien posiadać, czyli:

– wskazywać sektory/klastry, które plik okupuje (pierwszy klaster we wpisie katalogu, pozostałe w FAT table),

– nazwę pliku i inne metadane takie jak czasy czy atrybuty (wpisy katalogu),

– system uporządkowania w foldery (katalogi i wpisy katalogów)

NTFS jest systemem plików dużo bardziej zaawansowanym – zawiera funkcjonalność FAT-u ale też wiele innych dodatkowych funkcji.

Zacznijmy od początku. W NTFS wszystkie struktury systemu plików są plikami. Każde miejsce na woluminie jest albo puste albo okupowane przez plik. W FAT-ie mieliśmy takie struktury jak File Allocation Table, czy wpisy katalogu, które nie były plikami. W NTFS funkcjonalność ta zawarta jest w różnych plikach. Pliki te są niewidoczne w środowisku Windows, wystarczy jednak otworzyć dysk w aplikacji do informatyki śledczej aby pokazały się nam w całej okazałości. Pliki te znajdują się w głównym folderze woluminu (root) i zaczynają od znaku $:

NTFS_files

Najważniejsza punktu widzenia funkcjonalności systemu jest $MFT, potem długo, długo nic na kolejnym miejscu będzie chyba  $Bitmap.

Oto krótkie wyjaśnienie funkcjonalności poszczególnych plików:

$Volume – zawiera informacje o voluminie jak na przykład nazwę czy wersję. W praktyce plik ten jest rzadko używany i w powyższym przykładzie plik jest pusty.

$UpCase – mapa konwersji małych liter na duże. Nic ważnego z punku widzenia informatyki śledczej.

$Secure – zawiera deskryptory bezpieczeństwa.

$MFTMirr – jest to kopia zapasowa $MFT zawierająca tylko kilka początkowych wpisów.

$MFT – Master File Table. Jest to główna struktura NTFS. Wszystkie pozostałe można uznać za pomocnicze. MFT zawiera wpis dla każdego wpisu na dysku. Wpis ma długość jednego kilobajta i zawiera atrybuty pliku (takie jak nazwa, czasy, wielkość), informacje o wszystkich klastrach okupowanych przez plik (cluster runs) a czasami zawiera nawet zawartość pliku (gdy plik jest poniżej mniej więcej 700 bajtów). Poza tym MFT może zawierać wiele innych informacji. Foldery to też “pliki” posiadające 1024 bajtowy rekord w MFT.

$LogFile – jest to tak zwany journal. W nowoczesnych systemach operacyjnych journal jest odpowiedzialny za integralność operacji zapisu plików. Każda transakcja przed wykonaniem jest zapisana w journale. Jeżeli nie dojdzie ona do skutku z powodu awarii systemu, informacje z journalu  użyte zostaną w celu cofnięcia operacji i przywrócenia systemu plików do stabilnego stanu.

$Boot – to plik rozpoczynający się w sektorze 0 woluminu, czyli znany nam z FAT Volume Boot Record. W NTFS wszystko jest plikiem i nawet VBR ma swój wpis w MFT.

$Bitmap – to plik odpowiadający za status klastrów. $Bitmap zainteresowany jest tylko tym, czy klaster jest wolny czy zajęty. Każdy klaster posiada 1 bit w bitmapie. 0 znaczy wolny a 1 zajęty. Adresowanie klastrów zaczyna się od klastra 0, a nie 2 jak w FAT32. Również w odróżnieniu od FAT32 zerowy klaster zaczyna się w zerowym sektorze dysku. Klastry w bitmapie uszeregowane są w sekwencyjnie – 123 bit wyznacza status 123 klastra. Windows używa właśnie tego pliku, kiedy klikniemy na właściwościach dysku w celu sprawdzenia ilości wolnego miejsca. Teraz wiemy dlaczego operacja ta jest taka szybka.

$BadClus – zawiera informacje o uszkodzonych klastrach. Uszkodzone klastry to te dla których sprawdzenie funkcji skrótu CRC32 skończyło się niepowodzeniem. Pamiętajmy, że w obecnych dyskach funkcja S.M.A.R.T wychwytuje błędne sektory na poziomie firmwar’u dysku i system operacyjny oraz NTFS mogą o tych operacjach nie mieć pojęcia.

$AttrDef – definicje atrybutów używanych w NTFS.

Poza powyższymi plikami, w skład obiektów systemowych NTFS wchodzi folder $Extend, mogący zawierać różne rozszerzenia tego systemu plików:

NTFS extend

 

 

Bardziej wnikliwi czytelnicy zauważyli, że na zrzutach ekranów pominąłem jeszcze dwa pliki i jeden folder, które zaczynają się od znaku dolara. Powodem jest to, że co prawda wyglądają podobnie ale  nie są plikami systemowymi NTFS:

– $I30 – jest to tak naprawdę atrybut NTFS, a nie plik. Jest to indeks danego folderu, w tym wypadku katalogu Root. AccessData FTK wyświetla ten atrybut bezpośrednio w folderze, co jest dosyć wygodne z punktu widzenia informatyka śledczego. $I30 zawiera tylko wpisy, które nie zmieściły się w w atrybucie $INDEX_ROOT we wpisie MFT i zostały zapisane w dodatkowym atrybucie $INDEX_ALLOCATION.

– $TXF_DATA – zawiera informacje o transakcjach. Nie jest on używany zbyt często.

– $RECYCLE_BIN – to kosz na śmieci – z punktu widzenia NTFS to normalny folder. Funkcjonalność kosza wprowadzona jest na poziomie systemu operacyjnego Windows.

Podsumowując $MFT jest kręgosłupem NTFS. Najważniejsze funkcje i informacje są właśnie tam. $Bitmap wspomaga $MFT, wskazując, które klastry są zajęte, ale na upartego, tę informację można także wyciągnąć z $MFT na podstawie ciągów klastrów, które okupują poszczególne pliki.

Z punktu widzenia informatyka śledczego, istotnym źródłem informacji jest $LogFile, gdyż znajdziemy w nim historię niedawno wykonanych operacji na dysku.

Mózgiem NTFS i każdego systemu plików jest z kolei system operacyjny. To system operacyjny wykonuje wszystkie operacje i jest odpowiedzialny za to, żeby były one zgodne ze specyfikacją NTFS. Jak wygląda typowa kolejność zdarzeń? Po wykryciu nowego dysku, system operacyjny najpierw odczytuje informacje z MBR/GPT. Jeżeli znajdzie wpis dla partycji NTFS, odczytuje VBR tej partycji. W VBR znajduje informację o lokalizacji $MFT. Po znalezieniu $MFT, może odczytać informację o położeniu wszystkich innych obiektów na dysku i rozpocząć operacje plikowe.