Перейти до змісту

Prefetch

Що таке Prefetch

Файли Windows Prefetch фіксують відомості, які використовуються для оптимізації запуску програм. Файл .pf окремої програми зазвичай містить ім'я та хеш виконуваного файлу, кількість запусків, час останніх запусків, відомості про томи, каталоги та файли, до яких відбувалося звернення під час запуску.

Для підтримуваних версій Windows дійсний запис Prefetch програми зазвичай є вагомим доказом того, що виконуваний файл запускався. Це один із найкорисніших артефактів виконання поза журналами подій.

Найобґрунтованіший висновок: названий виконуваний файл було запущено в записаний час (або часи) останніх запусків з урахуванням поведінки операційної системи та коректності роботи парсера.

Розташування та збирання

C:\Windows\Prefetch\*.pf

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.

Стратегія розслідування

  1. Використовуйте -T, щоб додати збережені запуски до хронології.
  2. Групуйте за іменем виконуваного файлу та хешем Prefetch; однакове ім'я може мати різні шляхи/хеші.
  3. Перегляньте ExecutablePath, шляхи для підготовки даних, результати щодо переміщених системних двійкових файлів і завантажені DLL.
  4. Зіставляйте посилання MFT на цілі та шляхи до файлів із записами $MFT/USN.
  5. Зіставляйте час запусків із журналами подій, SRUM, мережевою телеметрією, службами, завданнями та артефактами користувача.

Додаткові відомості