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:
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:
- 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ędziapf
firmy TZWorks: