Windowsowa środa: Prefetch Files

W dzisiejszym wpisie poświęcę kilka chwil na omówienie Windows Prefetch. Ale najpierw, szybka wtyczka do nadchodzącego szkolenia:

Jestem w trakcie przygotowań do nadchodzącego szkolenia FOR508 z Chadem Tillburym na SANS Security East 2017. Chociaż jest już bardzo blisko, mamy nadzieję na świetne zajęcia i znalezienie następnej drużyny zabójczych kryminalistyków! Jeśli zamierzacie wziąć udział w zajęciach, proszę, dajcie mi znać z wyprzedzeniem. Jeśli chcesz wziąć udział, wierzę, że rejestracja jest wciąż otwarta! Również podczas tego wydarzenia, w środę, 11 stycznia, będę prowadził wykład SANS@Night zatytułowany Zero In on the Artifacts That Matter. Przygotowania do tego wykładu były inspiracją dla dzisiejszego wpisu, jako że prefetch z pewnością zostanie wspomniany.

Powiedziałem to już wcześniej i powiem jeszcze raz – wiele artefaktów, które uwielbiamy w świecie DFIR są tak naprawdę produktami ubocznymi systemu operacyjnego, który stara się ułatwić życie i/lub uczynić je bardziej wydajnym dla użytkownika lub deweloperów. Moim zdaniem, prefetch również należy do tej kategorii.

Prefetch istnieje od czasów Windows XP. Został pierwotnie zaprojektowany, aby pomóc przyspieszyć uruchamianie systemu i aplikacji. Celem prefetch jest analizowanie i rejestrowanie zachowania startowego aplikacji podczas wykonywania, aby przyszłe starty były bardziej wydajne. Dane te są rejestrowane przez maksymalnie 10 sekund po uruchomieniu aplikacji. Zarejestrowane zachowanie aplikacji jest zapisywane do pliku śladu – co nazywamy plikiem prefetch – w ścieżce C:\Windows\Prefetch.

Prefetch Files

Jak wspomniano powyżej, pliki prefetch znajdują się w katalogu statycznym C:\Windows\Prefetch. Pliki prefetch mają rozszerzenie .pf i są zgodne ze standardową konwencją nazewnictwa:

<APPLICATION NAME IN ALL CAPS>-<EIGHT CHARACTER HASH OF APPLICATION LOCATION>.pf

Pliki prefetch zawierają następujące metadane:

  • Nazwa odpowiadającego im pliku wykonywalnego
  • Liczba uruchomień pliku wykonywalnego
  • Rozmiar pliku prefetch
  • Pliki i katalogi, do których odwoływano się podczas uruchamiania aplikacji (to właśnie chce śledzić system Windows)
  • Informacje związane z woluminem, na którym znajduje się plik wykonywalny, w tym ścieżka woluminu i numer seryjny.

Tutaj jest próbka niektórych plików prefetch z mojego hosta testowego:

Screenshot Prefetch folder from a Windows 10 Test Host

Zauważ, że mam kilka aplikacji o tej samej nazwie, ale innej lokalizacji. Świadczą o tym nieco podobne hashe, a w wielu przypadkach aplikacji prawdopodobnie wskazują na aktualizację oprogramowania lub zmianę struktury folderów.

EDIT: Podziękowania dla Erica Zimmermana za przypomnienie mi, że nazwy plików prefetch są również zależne od argumentów wiersza poleceń i rozróżniają wielkość liter, pomimo braku rozróżniania wielkości liter w pliku trace. Hexacorn szczegółowo omawia algorytm hashowania i polecam go sprawdzić, jeśli potrzebujesz wykonać ten poziom analizy prefetch.

Parsing the Prefetch File

Struktura plików Prefetch jest właściwie dość dobrze znana i istnieje wiele dostępnych opcji parsowania. Oto kilka opcji:

  • Gdyby przyszło co do czego, możemy użyć strings, aby uzyskać pewne informacje o śladach prefetch. Oto przykład wyliczenia ciągów znaków Unicode z podejrzanego pliku wykonywalnego:

Zrzut ekranu ciągów znaków z pliku prefetch dla A.EXE
  • Eric Zimmerman utrzymuje swoje narzędzie PECmd, obecnie w wersji 0.7.2.0. Można je pobrać tutaj.
  • log2timeline/Plaso zawiera parser prefetch i może umieścić kluczowe dane z plików prefetch w formacie osi czasu.
  • TZWorks publikuje również naprawdę pomocny i poręczny parser prefetch pf. Możesz zobaczyć więcej informacji na jego temat tutaj. Oto przykład danych wyjściowych narzędzia pf firmy TZWorks:

Zrzut ekranu z wyjścia pf narzędzia TZWorks dla pliku prefetch

Zajmę się niektórymi artefaktami kryminalistycznymi w ramach tego wyjścia w następnej sekcji, ale zwróćmy uwagę, że otrzymujemy teraz informacje kontekstowe, czasy wykonania i ważne znaczniki czasowe.

Inna ważna uwaga dotycząca parsowania plików prefetch jest taka, że nowsze wersje prefetch, a mianowicie Windows 10, używają nowego formatu kompresji, który nie współgra dobrze z parserami dla poprzednich wersji. Upewnij się, że twoje narzędzie poradzi sobie z artefaktami Windows 10 – lub znajdź nowy skrypt – zanim założysz, że pliki mogą być uszkodzone.

Jak używać w DFIR

Analitycy DFIR muszą być świadomi prefetch, ponieważ zawiera on wiele wartości kryminalistycznych. Oto kilka sposobów, w jaki używałem prefetch w przeszłości:

  • Liczba uruchomień może być ważną wskazówką, jak długo złośliwe oprogramowanie mogło znajdować się w systemie lub jak często jest/było używane. Jeśli widziałeś dowody tylko na dwa wykonania złośliwego oprogramowania, ale plik prefetch pokazuje dziesiątki, to jest jeszcze trochę kopania do zrobienia.
  • Znaczniki czasowe pliku prefetch również mówią nam wiele. Zastanów się nad następującą kwestią: Co tworzy plik prefetch, a co modyfikuje plik prefetch? Przekształć te działania w znaczniki czasu, a będziemy mogli określić, co następuje: Znacznik czasu utworzenia pliku prefetch to pierwszy raz, kiedy aplikacja została wykonana, a ostatni zmodyfikowany czas pliku prefetch to ostatni raz, kiedy został on wykonany. Spójrzmy ponownie na zrzut ekranu z góry:

Zrzut ekranu z wyjścia pf programu TZWorks dla pliku prefetch

Zauważ nasz ostatni czas uruchomienia (2012-04-04 00:43:06.137) i czas modyfikacji: (2012-04-04 00:43:07). Teraz, możemy bardzo szybko przeglądać pliki Prefetch, bez potrzeby parsowania, i znaleźć nasze ostatnie czasy wykonania.

Możesz wykorzystać znaczniki czasu również w inny sposób. Na przykład, rozważmy przeglądanie znaczników czasu utworzenia wszystkich plików z folderu prefetch. Jeśli mamy jakieś interesujące nas przedziały czasowe lub pliki prefetch dla znanego złośliwego oprogramowania, poszukaj innych plików ze znacznikami czasowymi w bliskim sąsiedztwie czasowym.

  • Podczas analizowania plików prefetch, szczególnie tych związanych ze znanym złośliwym oprogramowaniem, przyjrzyj się plikom mapowanym lub ładowanym. Możesz znaleźć dodatkowe wskaźniki.
  • Dodatkowo, zbadaj katalogi mapowane z pliku prefetch. Możesz znaleźć dowody na istnienie dysku zewnętrznego lub poprzedniej partycji.
  • Czy widzisz wiele plików prefetch z różnymi hashami na końcu pliku? Pamiętaj, że ten hash jest pochodną lokalizacji – możesz mieć złośliwe oprogramowanie w wielu miejscach.
  • Na koniec, nie zapominaj, że system Windows monitoruje uruchamianie aplikacji przez maksymalnie 10 sekund. Tak więc, chociaż możemy polegać na znacznikach czasowych plików pobierania wstępnego jako dość silnych wskaźnikach, musimy wziąć pod uwagę maksymalne dziesięciosekundowe opóźnienie.

Wykraczając poza pobieranie wstępne

W systemie Windows Vista i później Microsoft kontynuował rozszerzanie pobierania wstępnego o dodatkowe funkcje, takie jak SuperFetch, ReadyBoost, ReadyBoot i ReadyDrive. Będę się zagłębiał w te funkcje w późniejszym poście.

Do jutra, Szczęśliwego Forensicatingu!

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.