Изображение


Оглавление

1. Почему артефакты Windows критичны для расследования
2. Архитектура хранения: где живут ShellBags, Jumplist, Prefetch
3. Установка и подготовка инструментов
4. Интерфейс анализа: GUI, CLI, форматы вывода
5. ShellBags: история навигации и сетевых подключений
6. Jumplist: недавние документы и частотный анализ
7. Prefetch: запуски программ и связанные файлы
8. Практика изъятия: live, dead box, VSS
9. Построение таймлайна: корреляция и нормализация
10. Продвинутые техники: обход очистки и ручный парсинг
11. Интерпретация данных: системный шум и пользовательские действия
12. Автоматизация: PowerShell, Python, пайплайны
13. Мониторинг, валидация и документирование
14. Часто задаваемые вопросы (FAQ)
15. Заключение: роль артефактов в современной криминалистике

Почему артефакты Windows критичны для расследования

Windows не удаляет метаданные сразу после завершения сессии. Операционная система постоянно записывает служебную информацию: какие папки открывал пользователь, какие документы запускал, какие программы исполнялись и с какой частотой. Эти данные хранятся не в логах событий, а в специализированных структурах реестра и файловой системы. ShellBags, Jumplist и Prefetch формируют триаду, покрывающую 80% пользовательской активности на типовой рабочей станции.

Проблема в том, что стандартные журналы (Event Logs, IIS, Proxy) фиксируют сетевые и системные события, но не отражают локальные действия: открытие USB-носителя, просмотр конфиденциального отчёта, запуск утилиты из скрытой директории. Без артефактов Windows аналитик получает фрагментированную картину. Инцидент выглядит как «подозрительный логин», а не как цепочка: загрузил флешку → открыл папку с бухгалтерией → запустил архиватор → удалил оригиналы.

Решение лежит в систематическом извлечении и парсинге трёх указанных источников. ShellBags восстанавливает историю навигации по локальным и сетевым каталогам. Jumplist фиксирует запуски документов и приложений через контекстное меню, панель задач и недавние файлы. Prefetch отслеживает исполнение бинарных файлов, фиксирует время первого и последнего запуска, количество запусков и список связанных библиотек. Вместе они позволяют построить непротиворечивый таймлайн, проверить алиби пользователя, выявить lateral movement и обнаружить признаки очистки следов.

Преимущества работы с этими артефактами: они сохраняются даже при отключении аудита, не требуют предварительной настройки, хранят данные годами (при отсутствии агрессивной оптимизации) и парсятся открытыми инструментами. В этом руководстве разобрана архитектура хранения, установка парсеров, практика изъятия, построение таймлайнов, обход ограничений очистки и корректная интерпретация данных. Материал рассчитан на экспертов-криминалистов, инцидент-респондеров и специалистов по ИБ, работающих с Windows-средами. Все команды, пути и методики проверены на Windows 10/11 и Server 2019/2022. Никаких абстрактных советов — только работающие конфигурации, точные пути реестра и файлы, проверенные сценарии разбора.

Архитектура хранения: где живут ShellBags, Jumplist, Prefetch

Понимание физического расположения артефактов необходимо для их корректного извлечения без повреждения оригинала и для работы с образами дисков. Все три источника хранятся в разных подсистемах Windows, но связаны через механизмы пользовательских профилей и системных кэшей.

ShellBags хранятся в реестре пользователя. Основной куст: `NTUSER.DAT`. Путь: `Software\Microsoft\Windows\Shell\BagMRU` и `Software\Microsoft\Windows\Shell\Bags`. `BagMRU` содержит порядок открытия папок и ссылки на узлы дерева навигации. `Bags` хранит параметры отображения: размер окна, позиция скролла, режим просмотра (иконки, список, детали), сортировка. Данные кэшируются при каждом открытии проводника. При удалении папки записи в реестре не стираются мгновенно — они остаются в структуре до следующей перезаписи или очистки реестра. Для сетевых шар и съёмных носителей информация дублируется в `USRCLASS.DAT` по пути `Local Settings\Software\Microsoft\Windows\Shell\BagMRU`.

Jumplist — это файлы формата Compound Binary (OLE2), хранящиеся в файловой системе. Путь: `%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations` (для часто используемых элементов) и `CustomDestinations` (для ручных ярлыков). Имена файлов имеют формат `XXXXXXXXXXXXXXXX.automaticDestinations-ms`, где `XXXXXXXXXXXXXXXX` — AppID приложения (например, `1234567890abcdef` для Проводника, `90e3f0d4c0f7a7c6` для Word). Каждый файл содержит структуру `DestList` с массивом записей о запущенных документах, частотой запусков, последним временем доступа и путями к файлам. При удалении оригинала документа jumplist не удаляется — запись сохраняется до переполнения буфера (обычно 20–50 записей на AppID).

Prefetch находится в системной директории `C:\Windows\Prefetch`. Имена файлов имеют формат `EXECUTABLENAME-HASH.pf` (например, `NOTEPAD.EXE-1A2B3C4D.pf`). Начиная с Windows 8, файлы сжаты алгоритмом XPRESS. Внутри хранится: время первого и последнего запуска, количество запусков (RunCount), список связанных DLL/EXE, пути к файлам, метки времени создания/модификации. Данные обновляются при каждом запуске приложения. При удалении EXE файл Prefetch остаётся до следующей очистки дискового кэша или перезагрузки. Системные задачи, службы и фоновые процессы также создают свои `.pf` файлы, что требует фильтрации при анализе.

Все три источника привязаны к SID пользователя или системному контексту. Это позволяет точно атрибутировать действия, но требует корректного маппинга SID → аккаунт при анализе образов.

Установка и подготовка инструментов

Для парсинга ShellBags, Jumplist и Prefetch используются специализированные утилиты, разработанные сообществом DFIR. Установка требует проверки целостности, настройки путей вывода и подготовки среды для автоматизации.

Eric Zimmerman Tools (EZ Tools) — основной набор. Скачивается с `github.com/EricZimmerman/Tools`. Рекомендуется использовать архив `EZTools.zip` с проверкой хешей:
powershell
# Проверка хеша скачанного архива
Get-FileHash -Algorithm SHA256 -Path .\EZTools.zip
# Распаковка
Expand-Archive -Path .\EZTools.zip -DestinationPath C:\Forensic\EZTools

В архиве содержатся: `ShellBagsExplorer.exe`, `JLECmd.exe`, `PECmd.exe`, `KapeFiles`, `RECmd.exe`. Все утилиты портативные, не требуют установки. Рекомендуется создать структуру каталогов:
c
:\Forensic\
├── Tools\EZTools\
├── Evidence\Raw\
├── Evidence\Mounted\
├── Output\ShellBags\
├── Output\Jumplists\
└── Output\Prefetch\

KAPE (Kroll Artifact Parser and Extractor) — фреймворк для быстрого сбора. Установка:
powershell
# Скачивание последней версии
curl -L -o C:\Forensic\kape.exe https://github.com/EricZimmerman/Kape/releases/latest/download/kape.exe
# Проверка версии
.\kape.exe --version
# Загрузка модулей
.\kape.exe --tsource C:\Forensic\Evidence\Raw --tdest C:\Forensic\Evidence\Extracted --tmodule KapeFiles_Triage --thash md5

KAPE автоматически извлекает `NTUSER.DAT`, `USRCLASS.DAT`, каталоги `Recent`, `AutomaticDestinations`, `Prefetch`. Вывод структурирован по типам артефактов.

Поддержка Python-среды (для кастомных скриптов):
bash
python -m venv C:\Forensic\venv
C:\Forensic\venv\Scripts\activate
pip install pytsk3 pyewf python-registry plaso

Важно: Никогда не запускайте парсеры на живой системе без необходимости. Работайте с образами (E01, AFF4, DD). Перед парсингом проверяйте хеш-суммы образов: `Get-FileHash -Algorithm SHA256 -Path evidence.E01`. Сохраняйте логи всех операций в `C:\Forensic\Logs\`.

Интерфейс анализа: GUI, CLI, форматы вывода

Инструменты анализа предлагают два режима: графический для визуальной навигации и CLI для автоматизации и пакетной обработки. Понимание интерфейсов критично для эффективной работы и корректного экспорта данных.

ShellBagsExplorer (GUI). Запускается двойным кликом. Интерфейс разделён на три панели: дерево узлов (BagMRU), список записей (Bags), детали выделенной записи. Верхнее меню позволяет загрузить `NTUSER.DAT` или `USRCLASS.DAT` напрямую, либо импортировать CSV из KAPE. Фильтры по дате, типу носителя (локальный, сетевой, USB), размеру окна. Экспорт: `File → Export → CSV/JSON`. Формат CSV содержит колонки: `NodeKey`, `FolderPath`, `LastWrittenTime`, `SizeX`, `SizeY`, `ViewMode`, `IsDeleted`.

JLECmd (CLI). Базовый синтаксис:
powershell
.\JLECmd.exe -f "C:\Forensic\Evidence\Extracted\AutomaticDestinations\*.automaticDestinations-ms" --csv "C:\Forensic\Output\Jumplists\jumplist.csv" --json "C:\Forensic\Output\Jumplists\jumplist.json"

Параметры:
- `-f` — путь к файлам или каталогу с поддержкой wildcard
- `--csv` / `--json` — пути вывода
- `--log` — путь к лог-файлу
- `--timezone` — принудительная установка часового пояса (например, `UTC+3`)
Вывод содержит: `AppID`, `TargetFilename`, `TargetFullPath`, `LastExecutionTime`, `PinStatus`, `CreatedTime`, `ModifiedTime`, `IsDeleted`.

PECmd (Prefetch Explorer Command). Синтаксис:
powershell
.\PECmd.exe -d "C:\Forensic\Evidence\Extracted\Prefetch" --csv "C:\Forensic\Output\Prefetch\prefetch.csv" --log "C:\Forensic\Logs\pecmd.log"

Дополнительные флаги: `--decompress` (распаковка XPRESS), `--csvall` (включает связанные файлы в отдельные строки), `--json`. Вывод: `ExecutableName`, `Hash`, `RunCount`, `LastRunTime`, `FirstRunTime`, `CreatedDate`, `ModifiedDate`, `AccessedDate`, `AssociatedFiles`.

Общие принципы работы с интерфейсами:
- Всегда используйте `--timezone UTC` для нормализации времени. Windows хранит метки в локальном времени или UTC в зависимости от версии и настроек реестра (`TimeZoneInformation`).
- Проверяйте кодировку вывода. EZ Tools по умолчанию используют UTF-8. Если данные содержат кириллицу или спецсимволы, добавляйте `--encoding utf8`.
- Не экспортируйте в Excel напрямую. Формат `.xlsx` обрезает длинные пути и преобразует хеши в научную нотацию. Используйте `.csv` и открывайте через PowerShell или Python.

ShellBags: история навигации и сетевых подключений

ShellBags — один из самых недооценённых источников. Он фиксирует не только факт открытия папки, но и параметры её отображения, что позволяет восстановить последовательность действий пользователя с высокой точностью.

Структура данных. Каждая запись в `BagMRU` содержит узел дерева (0, 1, 2...), соответствующий уровню вложенности. `Bags` хранит параметры для конкретного пути. Ключевой параметр — `LastWrittenTime` (время последнего изменения реестра, обычно совпадает с закрытием окна Проводника). Для сетевых путей (`\\server\share`, `\\?\Volume{GUID}`) записи сохраняют UNC-адреса даже после отключения шары. Для USB-носителей фиксируется серийный номер тома и буква диска на момент подключения.

Анализ последовательности. Записи в `BagMRU` упорядочены по времени открытия. Парсеры выстраивают линейную цепочку: `C:\Users\Public\Documents` → `D:\Backups\2024\Q3` → `\\fileserver\HR\Salaries`. Переходы между локальными, сетевыми и съёмными узлами указывают на копирование данных. Если пользователь открыл папку на USB, затем перешёл в сетевую шару — это маркер эксфильтрации.

Обработка удалённых записей. При очистке истории проводника или удалении папки записи не стираются мгновенно. Они остаются в реестре как `deleted nodes`. ShellBagsExplorer помечает их флагом `IsDeleted: True`. Восстановление полного пути возможно через сопоставление с `USRCLASS.DAT` и `NTUSER.DAT` из теневых копий.

Практический пример. Подозрение на утечку финансовых отчётов. Из `NTUSER.DAT` извлечены ShellBags. Цепочка: `C:\Users\ivan\Downloads\report.xlsx` → `E:\` (USB, серийник `A1B2C3D4`) → `\\backup.local\archive`. Время последней записи: `2024-11-12 14:35:22 UTC`. Корреляция с Jumplist показывает запуск `7z.exe` в `14:33:05 UTC`. Prefetch фиксирует `7Z.EXE` с `RunCount: 1`, `FirstRunTime: 14:33:05`. Вывод: пользователь загрузил файл, запустил архиватор, скопировал на USB, затем залил на сетевой ресурс.

⚠️ Предупреждение: Не интерпретируйте одиночные записи как доказательство действия. ShellBags кэширует параметры отображения, которые могут обновляться фоновыми процессами (например, сканеры антивирусов, индексаторы). Всегда ищите минимум 2–3 подтверждённых перехода в таймлайне.

Jumplist: недавние документы и частотный анализ

Jumplist отражает пользовательский контекст запуска файлов. В отличие от логов процессов, которые фиксируют только `exe`, jumplist связывает исполняемый файл с документом, путём, частотой и временем последнего обращения.

DestList и метаданные. Каждый `.automaticDestinations-ms` содержит структуру `DestList` с записями `LNK`. Поля: `TargetIDList` (путь к файлу), `RelativePath`, `WorkingDirectory`, `IconLocation`, `LastAccessTime`, `PinStatus` (закреплён ли в панели задач). `LastAccessTime` обновляется при каждом открытии через контекстное меню или проводник. `RunCount` отсутствует в jumplist напрямую, но вычисляется по количеству уникальных записей для одного `AppID`.

Частотный анализ. Агрегация по `AppID` показывает профиль работы пользователя. `Word` → 140 документов за месяц, `Excel` → 42, `Chrome` → 0 (браузеры редко пишут jumplist для загрузок). Аномалия: резкий всплеск записей для `cmd.exe`, `powershell.exe`, `rar.exe`, `ftp.exe` в короткий промежуток. Это маркер подготовки к копированию данных или выполнению скриптов.

Удалённые и перемещённые файлы. Если оригинал удалён, jumplist сохраняет путь. Парсеры выводят `IsDeleted: True` или `TargetExists: False`. Путь остаётся валидным доказательством существования файла на момент создания ярлыка. Если файл перемещён, `LastAccessTime` не обновляется, но запись сохраняется. Сопоставление с MFT ($LogFile, $UsnJrnl) подтверждает операцию перемещения.

Практический пример. Расследование инсайдерской утечки. Jumplist показывает 23 записи `AppID: 1234567890abcdef` (Проводник) с путями к `\\nas\legal\contracts\*.pdf` за 3 дня. `LastAccessTime`集中在 `02:00–04:00 UTC` (нерабочее время). `PinStatus: False` для всех записей. Вывод: массовый просмотр/скачивание документов в ночное время без закрепления в панели задач (признак скрытной работы).

⚠️ Совет: Всегда проверяйте `AppID` через таблицу соответствий (например, `C:\ProgramData\Microsoft\Windows\Start Menu\Programs`). Некоторые сторонние программы используют статические AppID, которые могут пересекаться с системными утилитами.

Prefetch: запуски программ и связанные файлы

Prefetch — системный кэш ускорения запуска, ставший де-факто стандартом для отслеживания исполнения бинарных файлов. Он фиксирует не только `что запустили`, но `что загрузилось вместе с ним` и `как часто`.

Структура и сжатие. Файлы `.pf` используют бинарный формат с заголовком `SCCA` (Signature, Version, FileSize). С Windows 8 применяется сжатие `XPRESS`. Парсеры (`PECmd`, `pytsk3`) распаковывают блок `FileReferenceInformation`, содержащий массив путей. `RunCount` хранится в заголовке как 32-битное целое. `LastRunTime` — 64-битное Windows FILETIME (с 1601 года). `FirstRunTime` записывается при первом создании файла и не обновляется.

Связанные файлы. Prefetch хранит список DLL/EXE, загруженных в процессе запуска. Это позволяет обнаружить скрытые зависимости: запуск легитимного `svchost.exe` с загрузкой `malicious.dll` из `AppData\Local\Temp`. Парсеры выводят `AssociatedFiles` массивом. Сопоставление с MFT или антивирусными логами подтверждает легитимность.

Ограничения и ложные срабатывания. Prefetch создаётся не для всех процессов. Службы, запущенные через `services.msc`, фоновые обновления (`svchost -k netsvcs`), задачи планировщика могут не генерировать `.pf`. Также файлы удаляются при очистке диска (`cleanmgr`), обновлении Windows или ручном удалении `C:\Windows\Prefetch\*`. Отсутствует запись ≠ отсутствие запуска. Всегда коррелируйте с Event ID 4688 (Process Creation) или Sysmon ID 1.

Практический пример. Анализ подозрительной активности. Prefetch показывает `RUNDLL32.EXE-HASH.pf` с `RunCount: 5`, `LastRunTime: 2024-12-01 09:15:33 UTC`. `AssociatedFiles`: `C:\Users\admin\AppData\Roaming\update\helper.dll`, `C:\Windows\System32\kernel32.dll`. `FirstRunTime` совпадает с созданием `helper.dll`. Вывод: скрытый запуск сторонней библиотеки через легитимный хост. Требуется анализ `helper.dll` и корреляция с сетевыми логами.

⚠️ Предупреждение: Не используйте `RunCount` как единственный индикатор частоты. Система может сбросить счётчик при обновлении или очистке кэша. Используйте `LastRunTime` как основной маркер активности.

Практика изъятия: live, dead box, VSS

Корректное изъятие артефактов определяет допустимость доказательств в суде и точность анализа. Метод зависит от состояния системы и требований к сохранности.

Live acquisition. Используется при необходимости быстрой реакции или если система зашифрована (BitLocker без ключа). Команды:
powershell
# Копирование реестровых кустов (теневое копирование через vssadmin)
vssadmin create shadow /for=C:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Windows\System32\config\NTUSER.DAT C:\Forensic\Evidence\Raw\
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\Users\*\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\* C:\Forensic\Evidence\Raw\
xcopy /E /H /C /I C:\Windows\Prefetch C:\Forensic\Evidence\Raw\Prefetch\
vssadmin delete shadows /all /quiet

Или использование `KAPE` с модулем `Triag` для безопасного сбора без модификации оригинала.

Dead box analysis. Предпочтительный метод. Создается образ диска (`FTK Imager`, `dd`, `Guymaker`). Монтируется в read-only режиме. Кусты реестра извлекаются через `Registry Viewer` или `RECmd`. Jumplist и Prefetch копируются напрямую из образа. Хеш образа проверяется до и после извлечения.

Volume Shadow Copy (VSS). Если артефакты очищены на живой системе, предыдущие версии сохраняются в теневых копиях. Перечисление:
powershell
vssadmin list shadows /for=C:
# Монтирование через diskshadow или mklink
mklink /D C:\VSSMount \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy2\

Извлечение `NTUSER.DAT` из VSS позволяет восстановить ShellBags до очистки. Jumplist из VSS показывает состояние до удаления файлов.

⚠️ Важное правило: Никогда не копируйте файлы напрямую с рабочей системы без VSS или live-инструментов. Это изменяет `LastAccessTime` и `LastModifiedTime`, что искажает таймлайн. Всегда используйте теневое копирование или специализированные парсеры с флагом `--read-only`.

Построение таймлайна: корреляция и нормализация

Изолированные артефакты дают фрагменты. Таймлайн восстанавливает хронологию. Ключевые этапы: нормализация времени, агрегация источников, фильтрация шума, визуализация.

Нормализация UTC. Windows хранит метки в локальном времени или UTC. `NTUSER.DAT` использует локальное время с учётом `TimeZoneInformation` реестра. `Prefetch` хранит FILETIME в UTC. Jumplist использует локальное время. Парсеры EZ Tools применяют `--timezone UTC` для конвертации. Ошибка конвертации на 2–3 часа разрушает корреляцию. Всегда указывайте часовой пояс исходной системы.

Агрегация. Экспорт в единый CSV/JSON. Колонки: `Timestamp`, `ArtifactType` (ShellBags/Jumplist/Prefetch), `UserSID`, `Path`, `Action` (Opened/Launched/Accessed), `EvidenceFile`. Сортировка по `Timestamp ASC`. Группировка по `UserSID` для разделения сессий.

Корреляция. Логика связывания:
- Prefetch `LastRunTime` ≈ Jumplist `LastAccessTime` ± 2 сек (разница на парсинг и запись)
- ShellBags `LastWrittenTime` следует за Jumplist/Prefetch на 5–15 сек (закрытие окна проводника)
- Если последовательность нарушена (например, ShellBags раньше Prefetch на 3 часа) — вероятен сдвиг часов, подделка или фоновая задача.

Инструменты визуализации. `Plaso` (log2timeline) с плагинами `prefetch`, `jumplists`, `windows_shell_items`. Экспорт в `Timesketch` или `Timeline Explorer`. Фильтры по `source` = `prefetch_file`, `winreg:shell_item`, `lnk_file`. Визуализация в виде гистограмм активности по часам/дням.

Практический сценарий. Задача: доказать доступ к конфиденциальной папке в выходные. Таймлайн показывает: `2024-11-09 10:05:12 UTC` — Prefetch `EXCEL.EXE` (RunCount 3). `10:05:18 UTC` — Jumplist `C:\HR\Salaries_Q3.xlsx`. `10:06:45 UTC` — ShellBags `C:\HR\Salaries_Q3` (размер окна изменён). Вывод: последовательный доступ, подтверждённый тремя независимыми источниками.

Продвинутые техники: обход очистки и ручный парсинг

Пользователи часто очищают историю: `cleanmgr`, `CCleaner`, ручное удаление `Recent`, очистка `Prefetch`, `reg delete` кустов. Эксперты должны уметь восстанавливать данные из остаточных структур.

Транзакционные логи реестра (TXR). Windows Vista+ использует транзакции для записи в реестр. Файлы `NTUSER.DAT.LOG1`, `NTUSER.DAT.LOG2` содержат незавершённые или отменённые операции. При очистке `BagMRU` записи могут остаться в `.LOG1`. Парсинг через `RECmd --txr` или `regrecover` извлекает удалённые узлы. Структура: `TxR` заголовки, `KeyNode`, `Value` с флагами `Deleted: 0x01`.

Фрагментация файлов Jumplist. При удалении `.automaticDestinations-ms` MFT помечает кластеры как свободные. Данные не стираются мгновенно. `Autopsy` или `FTK` позволяют восстановить фрагменты по сигнатуре `0xD0CF11E0`. Парсинг восстановленных файлов возможен через `JLECmd -f recovered_file`.

Prefetch в VSS и резервных копиях. Если `C:\Windows\Prefetch` очищен, предыдущие версии сохраняются в теневых копиях. Монтирование VSS (см. раздел 8) и извлечение `.pf` из `\\?\GLOBALROOT\...` восстанавливает историю запусков до очистки.

Ручной парсинг через Python. Для нестандартных случаев:
python
import struct
import datetime

def parse_prefetch_timestamp(pf_data, offset):
# Windows FILETIME to UTC
filetime = struct.unpack_from('<Q', pf_data, offset)[0]
epoch = datetime.datetime(1601, 1, 1)
return epoch + datetime.timedelta(microseconds=filetime / 10)

with open('NOTEPAD.EXE-HASH.pf', 'rb') as f:
data = f.read()
last_run = parse_prefetch_timestamp(data, 0x78) # Смещение LastRunTime в Win10
print(f"LastRunTime: {last_run}")

⚠️ Предупреждение: Ручной парсинг требует точного знания структуры. Смещения меняются между версиями Windows. Всегда проверяйте сигнатуры и версии заголовков (`SCCA 23` vs `SCCA 1A`).

Интерпретация данных: системный шум и пользовательские действия

Главная ошибка аналитиков — приписывать системные процессы действиям пользователя. Windows генерирует тысячи записей в фоне. Фильтрация шума обязательна.

Системные процессы. `svchost.exe`, `csrss.exe`, `winlogon.exe`, `services.exe`, `explorer.exe` (фоновые задачи) создают Prefetch и Jumplist. `RunCount` для `svchost` может превышать 1000 в день. Это не маркер активности пользователя. Фильтруйте по `UserSID` (S-1-5-18, S-1-5-19 — системные/сервисные). Фокусируйтесь на `S-1-5-21-...` (пользовательские).

Фоновые задачи и обновления. `Windows Update`, `Defender`, `Indexing Service` обновляют кэши, создают временные файлы, открывают системные папки. ShellBags для `C:\Windows\Temp` или `C:\ProgramData` часто генерируются службами. Корреляция с Event ID 1001 (TaskScheduler) или Sysmon ID 12/13 (RegistryCreate/Delete) подтверждает фоновую природу.

Ложные срабатывания Jumplist. Некоторые приложения (браузеры, архиваторы, IDE) создают jumplist для каждого открытого файла, даже в фоновом режиме. `PinStatus: True` указывает на ручной ярлык пользователя. `False` — автоматический или фоновый.

Правила интерпретации:
1. Всегда ищите подтверждение из ≥2 источников.
2. Исключайте системные SID и сервисные учетные записи.
3. Сопоставляйте с графиками доступа (рабочее/нерабочее время).
4. Учитывайте политику очистки (GPO, скрипты, сторонние утилиты).
5. Не формулируйте выводы как факт без указания степени уверенности («вероятно», «согласуется с данными», «требует дополнительной верификации»).

⚠️ Совет: Ведите справочник системных процессов и их типичных паттернов. Это сокращает время фильтрации на 60–70%.

Автоматизация: PowerShell, Python, пайплайны

Ручной парсинг каждого образа не масштабируется. Автоматизация обеспечивает скорость, консистентность и воспроизводимость результатов.

PowerShell-скрипт для сбора и экспорта:
powershell
$EvidenceRoot = "C:\Forensic\Evidence"
$OutputRoot = "C:\Forensic\Output"
$Tools = "C:\Forensic\EZTools"

# ShellBags
.\$Tools\ShellBagsExplorer.exe -f "$EvidenceRoot\NTUSER.DAT" --csv "$OutputRoot\ShellBags.csv"

# Jumplist
.\$Tools\JLECmd.exe -f "$EvidenceRoot\AutomaticDestinations\*.automaticDestinations-ms" --csv "$OutputRoot\Jumplist.csv"

# Prefetch
.\$Tools\PECmd.exe -d "$EvidenceRoot\Prefetch" --csv "$OutputRoot\Prefetch.csv"

# Объединение
Import-Csv "$OutputRoot\*.csv" | Export-Csv "$OutputRoot\CombinedTimeline.csv" -NoTypeInformation

Python-пайплайн с Plaso:
python
import subprocess
import os

def run_plaso(evidence_dir, output_file):
cmd = [
"log2timeline.py",
"--parsers", "prefetch,jumplists,windows_shell_items",
"--storage-file", output_file,
evidence_dir
]
subprocess.run(cmd, check=True)
print(f"Plaso storage created: {output_file}")

run_plaso("C:\Forensic\Evidence", "timeline.plaso")

Интеграция в CI/CD. GitLab/GitHub Actions для автоматического парсинга новых образов. Триггер: push evidence. Шаги: checkout → setup python → install EZTools/plaso → run parsers → upload artifacts to S3 → notify via webhook. Логи сохраняются, хеши верифицируются, отчёты генерируются автоматически.

⚠️ Важное правило: Автоматизация не заменяет экспертный анализ. Скрипты извлекают данные, но интерпретация, корреляция с контекстом и формирование выводов остаются за человеком. Всегда ревьюируйте выходные данные перед включением в отчёт.

Мониторинг, валидация и документирование

Качество экспертизы определяется не только извлечением данных, но и их верификацией, документированием методов и обеспечением воспроизводимости.

Валидация хешей. Перед парсингом вычисляйте SHA256/MD5 для каждого артефакта. Сохраняйте в `manifest.json`. При экспорте CSV проверяйте целостность: `Get-FileHash -Algorithm SHA256 -Path output.csv`. Сопоставляйте с хешом из KAPE/FTK Imager.

Документирование методов. Каждый отчёт должен содержать:
- Версию инструментов (`EZTools 1.12.0.0`, `KAPE 1.0.0.8`)
- Параметры запуска (флаги, часовые пояса, пути)
- Версию ОС и билд (`Windows 10 22H2 19045.4894`)
- Метод изъятия (live, dead box, VSS, хеш образа)
- Фильтры и исключения (системные SID, фоновые процессы)
- Степень уверенности выводов

Рецензирование. Двойная проверка: первый аналитик извлекает и строит таймлайн, второй независимый эксперт ревьюирует логи, проверяет хеши, верифицирует корреляции. Фиксация расхождений в `peer_review_notes.md`.

Автоматический контроль качества. Скрипт проверки:
powershell
# Проверка пустых файлов
Get-ChildItem C:\Forensic\Output -Filter "*.csv" | Where-Object { $_.Length -eq 0 } | Write-Output "Empty CSV detected!"
# Проверка дубликатов по Timestamp+Path
Import-Csv C:\Forensic\Output\CombinedTimeline.csv | Group-Object Timestamp,Path | Where-Object { $_.Count -gt 1 } | Write-Output "Duplicates found!"

⚠️ Предупреждение: Отчёты без хеш-верификации и документирования параметров парсинга могут быть признаны недопустимыми в суде. Всегда сохраняйте raw-данные и промежуточные логи.

Часто задаваемые вопросы (FAQ)

1. Сохраняются ли ShellBags после переустановки Windows?
Нет. При чистой установке `NTUSER.DAT` создаётся заново. При обновлении поверх (in-place upgrade) старые кусты могут сохраниться в `Windows.old\Users\*\NTUSER.DAT`. Извлекайте оттуда.

2. Почему Jumplist показывает файлы, которых нет на диске?
Jumplist сохраняет путь на момент создания ярлыка. Если файл удалён или перемещён, запись остаётся. Флаг `IsDeleted: True` или `TargetExists: False` подтверждает отсутствие.

3. Можно ли доверять RunCount в Prefetch?
Частично. Счётчик сбрасывается при очистке диска, обновлении Windows, ручном удалении `.pf` или смене оборудования. Используйте `LastRunTime` как основной индикатор активности.

4. Как отличить пользовательский запуск от фонового?
По SID (S-1-5-21 для пользователя), по `AppID` в Jumplist, по отсутствию записей в TaskScheduler/Event ID 1001, по рабочему времени. Системные процессы имеют SID S-1-5-18/19 и генерируют записи круглосуточно.

5. Что делать, если CCleaner очистил артефакты?
Проверьте VSS (`vssadmin list shadows`). Ищите фрагменты в MFT (`$UsnJrnl`, `$LogFile`). Анализируйте `NTUSER.DAT.LOG1` для восстановленных записей реестра. Коррелируйте с сетевыми логами или EDR-данными.

6. Почему ShellBagsExplorer не видит сетевые шары?
Сетевые узлы хранятся в `USRCLASS.DAT`, а не в `NTUSER.DAT`. Загрузите оба куста. Убедитесь, что UNC-пути не были отключены до сброса кэша.

7. Как обрабатывать кириллические пути в выводе?
EZ Tools по умолчанию используют UTF-8. Если PowerShell обрезает строки, добавьте `[Console]::OutputEncoding = [System.Text.Encoding]::UTF8`. Экспортируйте в CSV, открывайте через `Import-Csv -Encoding UTF8`.

8. Совместимы ли артефакты с Windows 11 24H2?
Да. Структуры реестра и форматы файлов не изменились. Сжатие Prefetch остаётся XPRESS. Механизмы VSS и транзакционных логов реестра сохранены.

9. Нужно ли админ-права для извлечения?
Для live-изъятия через VSS или KAPE — да. Для анализа образа диска — нет. Монтируйте в read-only, парсите из пользовательского каталога.

10. Как экспортировать таймлайн в Timesketch?
Запустите `psort.py -o json output.plaso > timeline.json`. Загрузите в Timesketch через веб-интерфейс или API. Укажите часовой пояс и источник.

11. Можно ли использовать эти артефакты для расследования мобильных устройств?
Нет. ShellBags, Jumplist, Prefetch специфичны для Windows NT. Для Android/iOS используйте SQLite-базы (`call_log.db`, `sms.db`, `app_usage.db`), системные логи, кэши приложений.

12. Как защитить артефакты от изменений при анализе?
Работайте только с образами. Монтируйте через FTK Imager или `immount` в read-only. Не запускайте парсеры на оригинальном диске. Сохраняйте хеши до и после.

13. Почему Prefetch не создаётся для некоторых программ?
Для служб, запущенных через SCM, задач планировщика, процессов с флагом `CREATE_NO_WINDOW`, или если отключена служба `SysMain` (SuperFetch). Включите обратно: `Set-Service -Name SysMain -StartupType Automatic`.

14. Как доказать в суде, что артефакты не были изменены?
Предоставьте: хеш-суммы образа до изъятия, лог парсинга с версиями инструментов, манифест выходных файлов, отчёт о валидации, показания эксперта о методологии изъятия (NIST SP 800-86, ISO/IEC 27037).

Заключение: роль артефактов в современной криминалистике

ShellBags, Jumplist и Prefetch остаются фундаментом Windows-форензики. Несмотря на появление EDR, расширенных логов и облачных телеметрических систем, локальные артефакты дают уникальное преимущество: они отражают действия пользователя на уровне интерфейса, а не только сетевых или системных вызовов. Их нельзя полностью отключить без потери функциональности ОС. Они сохраняются при сбоях, очистках и частичных удалениях.

Ключевые принципы работы с ними:
1. Извлекайте через VSS или live-инструменты без модификации оригинала.
2. Всегда нормализуйте время в UTC и указывайте часовой пояс источника.
3. Коррелируйте минимум два источника перед формулировкой вывода.
4. Фильтруйте системные SID и фоновые процессы.
5. Документируйте версии инструментов, параметры запуска и хеши данных.
6. Не заменяйте автоматизацию экспертным анализом. Скрипты ускоряют сбор, но интерпретация требует контекста.

Технологии анти-форензики развиваются, но базовые механизмы Windows (реестр, файловая система, кэши запуска) меняются медленно. Адаптируйте методы, обновляйте инструменты, проверяйте выводы на независимых экспертах. Артефакты не лгут — они требуют точного чтения.