Prefetch¶
Що таке Prefetch¶
Файли Windows Prefetch фіксують відомості, які використовуються для оптимізації запуску програм. Файл .pf окремої
програми зазвичай містить ім'я та хеш виконуваного файлу, кількість запусків, час останніх запусків, відомості
про томи, каталоги та файли, до яких відбувалося звернення під час запуску.
Для підтримуваних версій Windows дійсний запис Prefetch програми зазвичай є вагомим доказом того, що виконуваний файл запускався. Це один із найкорисніших артефактів виконання поза журналами подій.
Найобґрунтованіший висновок: названий виконуваний файл було запущено в записаний час (або часи) останніх запусків з урахуванням поведінки операційної системи та коректності роботи парсера.
Розташування та збирання¶
Juntei підтримує версії формату з 17 по 31 (від Windows XP до Windows 11), зокрема стиснені файли Windows 8+. Збирайте весь каталог, щоб можна було порівнювати хеші імен виконуваних файлів і сусідні записи.
Застереження для аналітика¶
- У старіших версіях Windows зберігає лише один історичний час запуску, а в новіших — до восьми.
RunCountможе перевищувати кількість доступних часових позначок. - Prefetch може бути вимкнено, очищено, виключено або недоступно в деяких системах/ролях. Відсутність не є доказом того, що програма не запускалася.
- Списки завантажених файлів описують залежності та звернення під час запуску; вони не доводять, що кожен перелічений файл був шкідливим, навмисно відкритим або повністю прочитаним.
- Довжина імені виконуваного файлу в заголовку Prefetch обмежена; Juntei визначає шлях за завантаженими файлами, коли це можна зробити однозначно.
- Часові позначки файлової системи вихідного файлу
.pfвідокремлені від вбудованих часів запуску. Findings— це спостереження для пошуку загроз. Інсталятори та легітимне адміністрування часто використовують шляхи для підготовки даних.
Аналіз за допомогою Juntei¶
Usage: juntei parse-file prefetch <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find *.pf files
-f, --file <FILE> Parse one Prefetch file
Records:
-T, --timeline Write one row per retained execution time, sorted by time
Output:
-o, --output <FILE> Save every record
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-file prefetch -d Prefetch/ -o prefetch.csv
juntei parse-file prefetch -d Prefetch/ -T -o prefetch-timeline.csv
juntei parse-file prefetch -d Prefetch/ -t jsonl \
| jq 'select(.ExecutableName? | test("powershell|rundll32"; "i"))'
Стандартні поля CSV¶
| Поле | Інтерпретація |
|---|---|
SourceFile |
Вхідний .pf; зберігайте його, щоб розрізняти хости та однакові імена виконуваних файлів. |
ExecutableName |
Ім'я виконуваного файлу із заголовка. Для більшості пошуків регістр не враховується; зберігайте початкове написання. |
ExecutablePath |
Визначений Juntei шлях завантаження, якщо це можливо. Перевіряйте його за Files та іншими артефактами. |
PathValidated |
Обраний шлях відповідає хешу шляху SCCA. Це підтверджує прив’язку шляху, а не вміст чи надійність файлу. |
PathAmbiguous |
Кілька завантажених шляхів залишаються можливими; ExecutablePath містить ім’я із заголовка. Перевірте Files та інші артефакти. |
PrefetchHash |
Хеш, який Windows використовує в імені файлу .pf; це не криптографічний хеш вмісту файлу. |
FormatVersion |
Версія структури Prefetch; визначає доступні поля та кількість часових позначок. |
RunCount |
Сукупний лічильник, записаний Windows. Корисний для оцінки частоти, а не точної історії. |
LastRun |
Найновіший збережений час виконання. |
PreviousRun1 … PreviousRun7 |
Попередні збережені часи виконання, від новіших до старіших. Порожні, якщо формат/історія їх не містить. |
VolumeCount |
Кількість записаних вихідних томів. |
VolumeDevicePaths |
Шляхи до пристроїв NT для томів, використаних під час запуску. Зіставляйте із серійними номерами. |
VolumeSerialNumbers |
Ідентифікатори томів; корисні для зв'язування доказів зі знімних або переформатованих дисків. |
VolumeCreated |
Записаний час створення томів, а не час створення виконуваного файлу. |
DirectoryCount |
Кількість записаних рядків каталогів. |
FileCount |
Кількість записаних посилань на завантажені файли. |
Findings |
Спостереження Juntei, як-от переміщені системні двійкові файли або підозрілі шляхи виконання. Перевіряйте вручну. |
Files |
Завантажені файли та файли, до яких відбувалося звернення, з доступними посиланнями NTFS. Чудова точка переходу за DLL/шляхом, але не доказ наміру щодо файлу. |
Dir |
Рядки каталогів, пов'язані із запуском. Корисні, коли окремі шляхи завантажених файлів неповні. |
Поля CSV хронології (-T)¶
| Поле | Інтерпретація |
|---|---|
RunTime |
Один збережений час виконання з Prefetch. |
ExecutableName, ExecutablePath |
Ідентичність програми / контекст шляху. |
PathValidated |
Обраний шлях відповідає хешу шляху SCCA. Це підтверджує прив’язку шляху, а не вміст чи надійність файлу. |
PathAmbiguous |
Кілька завантажених шляхів залишаються можливими; ExecutablePath містить ім’я із заголовка. Перевірте Files та інші артефакти. |
PrefetchHash |
Розрізняє варіанти/шляхи з однаковим ім'ям виконуваного файлу. |
RunCount |
Лічильник із файлу Prefetch; повторюється в кожному рядку хронології. |
SourceFile |
Вихідний .pf для перевірки. |
JSON/JSONL зберігає томи, каталоги, завантажені файли та посилання на файли NTFS у вигляді структурованих масивів, а не об'єднаних комами комірок CSV.
Стратегія розслідування¶
- Використовуйте
-T, щоб додати збережені запуски до хронології. - Групуйте за іменем виконуваного файлу та хешем Prefetch; однакове ім'я може мати різні шляхи/хеші.
- Перегляньте
ExecutablePath, шляхи для підготовки даних, результати щодо переміщених системних двійкових файлів і завантажені DLL. - Зіставляйте посилання MFT на цілі та шляхи до файлів із записами
$MFT/USN. - Зіставляйте час запусків із журналами подій, SRUM, мережевою телеметрією, службами, завданнями та артефактами користувача.