Informacja o plikach, które znajdują się na NTFS umieszczona jest w $Mft. Dodatkowo jednak utrzymywane są indeksy, które pozwalają na bardziej efektywne listowanie plików w katalogach. Rekordy w $Mft (te dotyczące katalogów) mają dwa atrybuty:
- $INDEX_ROOT,
- $INDEX_ALLOCATION,
Czasami (jeśli zawartość katalogu jest na tyle mała), jest tylko atrybut $INDEX_ROOT. Czasami w (nieużywanej) części indeksu znajduje się informacja o plikach, które kiedyś były w katalogu. Informacja ta jest dość skromna, bo i indeksowanych informacji jest stosunkowo niewiele. Pozwala jednak stwierdzić, że jakiś plik istniał (w danym katalogu), oraz określić mniej więcej, kiedy istniał. Trochę dokładniejsze wytłumaczenie jest tutaj.
...i kilka słów więcej
Jeśli chodzi o dokumentację do NTFS, to dość dobra jest dostępna w ramach projektu linux-nfts. Nie udało mi się co prawda w oparciu o nią napisać skrypt, do odczytu indeksów, ale jest wystarczająco dobra, by poszczególne elementy indeksu zinterpretować.
Jeden z poszukiwanych plików (yhxdrg.bat) wykorzystywanych przez moje tamagotchi
zostawił po sobie właśnie taki ślad. To, że plik istniał, już wiedziałem z rejestru. Z pozostałości w indeksie dowiedziałem się, że data jego utworzenia to 2008-05-17 19:47:16, a rozmiar to 200 bajtów (czyli tak jak przypuszczałem, cały się zmieścił w $Mft). Ot, taka ciekawostka.
Jak zinterpretować informacje z indeksu? To stosunkowo proste, gdy znajdzie się początek nazwy pliku (nazwy są zapisane w UTF-16), na dwóch poprzedzających bajtach zapisane są:
-
długość nazwy pliku (w znakach, a nie bajtach, czyli rzeczywisty rozmiar w pliku jest dwa razy większy z uwagi na UTF-16),
-
przestrzeń nazw (a są następujące przestrzenie: 0 - POSIX, 1 - Win32, 2 - DOS, 3 - Win32 & DOS),
Dalej idąc "od tyłu":
-
8 bajtów na flagi pliku,
-
8 bajtów na rozmiar pliku (prawdziwy),
-
8 bajtów na rozmiar pliku (zaalokowany),
-
8 bajtów na datę ostatniego dostępu,
-
8 bajtów na datę ostatniej modyfikacji rekordu pliku,
-
8 bajtów na datę ostatniej modyfikacji,
-
8 bajtów na datę utworzenia,
Wszystkie daty są zapisane jako timestamp w formacie FILETIME. Osobiście lubię korzystać z HEX Editor z MiteC, który te wartości automatycznie interpretuje.
Jeśli po mojej prezentacji na dzisiejszym spotkaniu OWASP kogoś zainteresował temat ogólnie pojętego forensic, być może zainteresują go również starsze wpisy dotyczące tego tematu. Nazbierało się tego trochę, więc małe przypomnienie części z poruszanych t
Przesłany: Jun 10, 20:54