Перейти к содержимому

Построение таймлайна инцидента в Velociraptor: час вместо грепа по десяткам хостов

Построение таймлайна инцидента в Velociraptor: час вместо грепа по десяткам хостов
Время чтения: 12 мин.

Недавнее расследование — 47 хостов с подозрением на lateral movement (горизонтальное перемещение атакующего между машинами) через RDP. Логи разбросаны, централизованного SIEM нет. Классический подход: SSH на каждый хост, wevtutil по журналам, ручная выгрузка Prefetch-файлов, склейка в Excel. По моему опыту — трое суток минимум. Velociraptor собрал артефакты со всех 47 машин за 12 минут, а построение таймлайна инцидента от первичного доступа до перемещения по сети заняло ещё 40 минут. Разница не в навыках аналитика. Разница в инструменте.

Почему ручной сбор артефактов не работает при расследовании инцидентов на множестве хостов

Типичный сценарий: на одном хосте обнаружен подозрительный процесс. Нужно понять масштаб — куда атакующий добрался, какие учётные данные скомпрометированы, какие файлы затронуты. Ручной подход — последовательный:

  1. Подключиться к хосту по SSH или RDP.
  2. Выгрузить журналы — Event Logs, Prefetch, записи реестра.
  3. Скопировать файлы на аналитическую станцию.
  4. Распарсить каждый артефакт отдельным инструментом.
  5. Вручную собрать таймлайн, сопоставляя временные метки из разных источников.

На 5 хостах это несколько часов. На 20 — рабочий день. На 50+ — несколько суток. Каждая минута задержки критична. По данным Mandiant M-Trends 2025, медианное время нахождения злоумышленника в сети до обнаружения — 11 дней (исторический минимум). К моменту начала расследования атакующий может уже полторы недели перемещаться по инфраструктуре. Пока аналитик вручную грепает логи на третьем хосте, злоумышленник на двадцатом уже удаляет свои следы.

Удаление следов — не теория. MITRE ATT&CK (открытая база тактик и техник атак; T-коды вроде T1070 — её идентификаторы) описывает целое семейство техник антифорензики: очистка журналов Windows (T1070.001), удаление файлов (T1070.004), подмена временных меток (T1070.006 — Timestomp). Ручной сбор просто не успевает обогнать атакующего, который активно заметает следы.

По данным CrowdStrike Global Threat Report 2025, 75% вторжений используют действительные учётные данные — атакующий не ломает пароли, а входит с украденными. Следы lateral movement выглядят как легитимные входы администраторов. Без одновременного сбора данных со всех хостов и их корреляции отличить злоумышленника от сисадмина невозможно.

Velociraptor для расследования инцидентов: архитектура и возможности

Velociraptor — бесплатный open-source инструмент для мониторинга эндпоинтов (конечных устройств: рабочих станций, серверов) и реагирования на инциденты. Проект принадлежит Rapid7, но остаётся полностью открытым. Один сервер обслуживает 10 000–15 000 эндпоинтов, а с multi-frontend архитектурой — свыше 100 000.

Принципиальное отличие от классической форензики: не нужно снимать полный образ диска. Velociraptor позволяет точечно запрашивать конкретные артефакты с любого количества хостов одновременно. Запросы пишутся на VQL (Velociraptor Query Language) — язык запросов, специфичный для этого инструмента.

На практике это выглядит так: вместо того чтобы создавать образ диска через FTK Imager и потом вытаскивать из него SAM-файл реестра (хранит хеши паролей локальных учётных записей), вы получаете его одним VQL-запросом. Без образа. Без копирования гигабайтов по сети.

Архитектура — клиент-сервер:

  • Сервер разворачивается на Linux VM (облако или выделенная машина). Хостит веб-интерфейс и обрабатывает результаты запросов.
  • Агенты (клиенты) — лёгкие бинарники на каждом эндпоинте (Windows, Linux, macOS). Агент слушает команды от сервера и выполняет VQL-запросы локально.
  • Веб-консоль — основной интерфейс аналитика: запуск хантингов, просмотр результатов, встроенные Notebook для ad-hoc запросов.

Документация по развёртыванию подробно описана на docs.velociraptor.app/docs/deployment/. Здесь предполагаем, что сервер и агенты уже стоят — фокусируемся на том, как из сырых данных построить таймлайн.

Сбор артефактов с хостов Velociraptor: механика Hunt

Hunt (хант) — сетевой сбор артефактов, который запускается одновременно на всех подключённых эндпоинтах или на отфильтрованной группе. Это ключевая функция для автоматизации DFIR Velociraptor на масштабе.

Шаг 1. В веб-консоли перейдите в Hunt Manager через боковое меню. Нажмите «+» для создания нового ханта.

Шаг 2. Вкладка Select Artifacts — выберите артефакты. Для построения таймлайна атаки обычно нужны три категории:

  • Windows.EventLogs.EvtxHunter — журналы событий Windows (аутентификация, запуск процессов, RDP-сессии).
  • Windows.Timeline.Prefetch — записи о запуске программ (включая удалённые).
  • Windows.NTFS.MFT — информация о всех файлах на томе, включая удалённые.

Шаг 3. Вкладка Configure Parameters — настройте фильтры. Без фильтрации Hunt вернёт все журналы со всех хостов — десятки гигабайт, в которых утонете. Задайте временной диапазон (скажем, последние 14 дней) и конкретные Event ID. Для расследования lateral movement ключевые: 4624 (успешный вход), 4625 (неудачный вход), 4672 (назначение привилегий), 4688 (создание процесса).

Шаг 4. Нажмите Launch. Результат появится в Hunt Manager.

Как понять, что всё сработало: на вкладке Overview — количество обработанных клиентов, время завершения, кнопка Download Results. На вкладке Clients — список хостов с зелёной галочкой (сбор завершён). Типичное время сбора на 50 хостах — 10–15 минут в зависимости от объёма логов и пропускной способности сети.

VQL-запросы для построения таймлайна атаки

Event Logs — следы аутентификации и перемещения

Event Logs (журналы событий Windows) — главный источник информации о входах и lateral movement. Ключевые Event ID:

  • 4624 — успешный вход. Поле LogonType покажет тип: 10 = RDP, 3 = сетевой, 2 = интерактивный.
  • 4625 — неудачная попытка входа. Массовые попытки = brute force или password spraying.
  • 4672 — назначение специальных привилегий при входе. Если это событие появляется на хосте, где пользователь обычно не имеет привилегий, — тревожный сигнал.
  • 21, 25 (журнал TerminalServices-LocalSessionManager) — факт RDP-сессии.

Пример из практики: в расследовании Solar 4RAYS (атака группировки Gambling Zealot) характерным следом туннелирования трафика через ngrok было значение ::%16777216 в поле «Адрес сети источника» событий с Event ID 21 и 25. Группировка использовала ngrok, замаскированный под vmtool.exe в C:\Windows\System32, для обратного RDP-доступа.

VQL-запрос для поиска подозрительных RDP-входов по результатам ханта:

-- пример для демонстрации концепции; 
-- синтаксис уточняйте в docs.velociraptor.app
SELECT EventTime, ClientId, Computer,
       EventData.TargetUserName AS User,
       EventData.IpAddress AS SourceIP
FROM hunt_results(hunt_id="H.12345",
     artifact="Windows.EventLogs.EvtxHunter")
WHERE EventID = 4624
  AND EventData.LogonType = 10
  AND NOT SourceIP =~ "^10\\.|^192\\.168\\."
ORDER BY EventTime

Что делает запрос: берёт результаты ханта со всех хостов, выбирает только RDP-входы (LogonType 10) с IP-адресов, не принадлежащих частным диапазонам. На выходе — хронология подозрительных внешних подключений на всех машинах в одной таблице. Для тех, кто только начинает работать с VQL: hunt_results() — это функция, которая обращается к уже собранным данным ханта по его ID, а фильтрация через WHERE работает по аналогии с SQL.

Prefetch и MFT — история запуска и файловой активности

Prefetch (файлы предзагрузки Windows из C:\Windows\Prefetch) хранят записи о последних 8 запусках каждой программы, включая удалённые исполняемые файлы. Атакующий может удалить свой инструмент (T1070.004), но Prefetch покажет, что он запускался, когда и сколько раз. Это как журнал посещений — даже если гость ушёл, запись в книге осталась.

MFT (Master File Table — главная файловая таблица NTFS) содержит запись о каждом файле, который когда-либо существовал на томе, включая удалённые. Для каждого файла сохраняются временные метки создания, модификации и доступа. Если атакующий создал скрипт, запустил и удалил — MFT покажет факт существования, полный путь и время создания.

Артефакт Windows.Timeline.Prefetch в Velociraptor парсит все .pf файлы и возвращает структурированные данные: имя программы, путь, количество запусков, временные метки. Артефакт Windows.NTFS.MFT позволяет искать по маске имени файла или по временному диапазону — без необходимости выгружать весь MFT (который может весить гигабайты).

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

Предпосылки: развёрнут сервер Velociraptor, агенты установлены на исследуемых хостах, у вас есть доступ к веб-консоли с правами администратора. Если агенты ещё не установлены — процесс описан в документации docs.velociraptor.app/docs/deployment/clients/.

Делай раз: массовый сбор артефактов

Создайте Hunt с тремя артефактами: Windows.EventLogs.EvtxHunter (фильтр по Event ID: 4624, 4625, 4672, 4688), Windows.Timeline.Prefetch (без фильтров — собираем всё), Windows.NTFS.MFT (фильтр по временному диапазону, скажем, последние 30 дней).

Как понять, что получилось: после запуска на вкладке Clients появится список хостов. Зелёная галочка = сбор завершён. Красный значок рядом с хостом — агент не отвечает (хост выключен, сеть недоступна, агент не установлен). Время сбора трёх артефактов с 50 хостов — 10–20 минут.

Делай два: фильтрация и корреляция в Notebook

Velociraptor включает встроенный Notebook — интерактивную среду для VQL-запросов прямо в веб-интерфейсе. Откройте вкладку Notebook внутри ханта и пишите корреляционный запрос.

Цель — найти цепочку перемещения: на каком хосте атакующий появился первым, откуда пришёл, куда двинулся дальше.

-- пример для демонстрации концепции
SELECT EventTime, Computer,
       EventData.TargetUserName AS User,
       EventData.IpAddress AS SourceIP
FROM hunt_results(hunt_id="H.12345",
     artifact="Windows.EventLogs.EvtxHunter")
WHERE EventID = 4624
  AND EventData.LogonType IN (3, 10)
ORDER BY EventTime

Что здесь происходит: запрос собирает все сетевые (LogonType 3) и RDP (LogonType 10) входы со всех хостов, отсортированные по времени. В результирующей таблице вы увидите цепочку: хост A (вход от SourceIP X в 14:02) → хост B (вход от IP хоста A в 14:07) → хост C (вход от IP хоста B в 14:12). Это lateral movement path — маршрут атакующего по сети. Если вы впервые видите такую цепочку — запомните паттерн: одинаковый SourceIP, интервалы в 3–10 минут, последовательное появление на новых хостах.

Делай три: экспорт и визуализация таймлайна

Из Notebook экспортируйте результаты в CSV (кнопка Download в интерфейсе). Дальше два пути:

Быстрый: откройте CSV в Timeline Explorer (бесплатный инструмент от Eric Zimmerman) или в Excel. Сортировка по столбцу EventTime даёт готовый таймлайн. Для первых расследований этого хватает.

Продвинутый: загрузите результаты в Timesketch (инструмент от Google для совместного анализа таймлайнов). По данным Hunt & Hackett, их пайплайн Velociraptor → Dissect → Timesketch автоматически трансформирует коллекции в таймлайн событий. Команда разработала и поддерживает Velociraptor loader для фреймворка Dissect — к декабрю 2024 года внесено 12 вкладов в open-source проект от нескольких участников IR-сообщества.

На выходе — единый таймлайн, в котором для каждого события указаны время, хост, источник артефакта (Event Log / Prefetch / MFT) и детали. Полная хронология инцидента: первичный вход → создание файлов → запуск инструментов → перемещение на следующий хост → удаление следов.

Автоматизация DFIR Velociraptor: пайплайн для регулярных расследований

Для команд, которые проводят расследования регулярно, стоит выстроить конвейер. По данным Recon InfoSec (подход описан в их выступлении на SANS DFIR Summit), пайплайн состоит из четырёх этапов:

Этап Что происходит Инструмент Время на 50 хостах
Scope Определить затронутые хосты по алертам SIEM / EDR Минуты
Acquire Запустить Hunt с нужными артефактами Velociraptor 10–20 мин
Process Парсинг артефактов в единый таймлайн Plaso / log2timeline 15–30 мин
Analyze Совместный анализ таймлайна Timesketch Часы

Plaso (он же log2timeline) — инструмент, который парсит десятки форматов артефактов (Event Logs, Prefetch, MFT, реестр и другие) и генерирует единый хронологический поток событий. Ставится через pip install plaso или Docker-образ.

Timesketch разворачивается через Docker Compose (инструкция на timesketch.org). По опыту Hunt & Hackett, стандартный Timesketch хорошо работает на расследованиях до ~10 систем. На сотнях хостов начинаются проблемы с масштабируемостью: хранение данных, полнотекстовый поиск, параллельная загрузка таймлайнов. Команда создала форк с оптимизациями для крупных инцидентов. Если начинаете с десятков хостов — стандартной версии достаточно.

На бенчмарке Recon InfoSec: triage-архив размером 4.2 ГБ (сгенерированный KAPE-профилем !SANS_Triage.tkape) обрабатывается Plaso и индексируется в Timesketch за минуты.

Хантинг с Velociraptor: обнаружение антифорензики

Грамотные атакующие целенаправленно уничтожают следы. В рамках тактики Defense Evasion (уклонение от обнаружения) MITRE ATT&CK описывает:

  • T1070.001 — очистка Event Logs (команда wevtutil cl Security).
  • T1070.003 — очистка истории команд (удаление .bash_history, PSReadLine).
  • T1070.004 — удаление файлов после использования.
  • T1070.006 — Timestomp (подмена временных меток, чтобы файл выглядел как старый системный).

Velociraptor помогает обнаружить все эти попытки. Вот как.

Очищенный Event Log оставляет Event ID 1102 («The audit log was cleared»). Этот артефакт сохраняется даже после удаления остальных записей. Hunt по Event ID 1102 на всех хостах за секунды покажет, где логи чистили.

Timestomp выявляется через MFT: у каждого файла в NTFS два набора временных меток — $STANDARD_INFORMATION и $FILE_NAME. Инструменты вроде timestomp меняют только первый. Если $SI показывает 2020 год, а $FN — 2025, файл подделан. Velociraptor-артефакт для MFT позволяет массово искать такие расхождения. Для новичков: $SI — это метаданные, которые видит пользователь в свойствах файла, а $FN — внутренние метаданные файловой системы, до которых большинство инструментов подмены не добирается.

Удалённые инструменты оставляют следы в Prefetch. В расследовании Solar 4RAYS группировка Gambling Zealot использовала PowerShell-скрипты (T1059.001, тактика Execution) для сброса паролей AD и инструменты Impacket (secretsdump.exe, wmiexec.exe) для дампа учётных данных. Даже при удалении самих файлов Prefetch зафиксировал бы факт их запуска, а PowerShell ScriptBlock логирование (Event ID 4104) — содержимое выполненных скриптов.

Форензика по сети Velociraptor: что видно только при массовом сборе

Главное преимущество — не скорость сбора, а корреляция. Когда данные со всех хостов в одной базе, видно то, что невозможно заметить при ручном анализе машина за машиной.

Lateral movement path. Цепочка: хост A (RDP от SourceIP X, 14:02) → хост B (RDP от IP хоста A, 14:07) → хост C (PsExec с хоста B, 14:12). Ручной grep покажет каждый фрагмент изолированно, без связи между хостами.

Timeline gaps. Пустоты в логах, указывающие на очистку. Если на хосте B Event Log обрывается в 14:05 и начинается заново в 14:15, между этими точками произошло что-то, что атакующий пытался скрыть. Сам по себе gap — уже артефакт.

Pattern matching по хостам. Один и тот же инструмент (тот же ngrok, переименованный в vmtool.exe) обнаруживается на 5 хостах. По отдельности аналитик может не связать разные имена файлов, но единый Prefetch-таймлайн с хешами покажет совпадение.

По данным IBM X-Force Threat Intelligence Index 2025, рост атак с использованием валидных учётных данных составил 71% год к году. Эндпоинт-видимость при расследовании — не опция, а обязательное условие: без одновременного доступа к данным десятков хостов атакующий с украденными паролями неотличим от администратора.

Подход на базе ручного грепа работал, когда инфраструктура состояла из 20 серверов. Сегодня среднее расследование — десятки хостов, разнородные ОС и атакующий, который провёл в сети больше недели. Velociraptor не заменяет аналитика: Hunt собирает, VQL фильтрует, Notebook коррелирует. Аналитику остаётся то, что машина не может — понять контекст, оценить масштаб компрометации, принять решение о containment (изоляции скомпрометированных систем). Я вижу, что джуны, осваивающие Velociraptor в первый месяц работы в SOC (Security Operations Center — центр мониторинга безопасности), выходят на уровень самостоятельного расследования заметно быстрее тех, кто начинает с ручного парсинга. Не потому что инструмент проще — потому что он сразу показывает полную картину, а не фрагмент с одного хоста. Удалённый сбор доказательств, хост-ориентированная форензика, корреляция событий по временным меткам — всё это базовые навыки DFIR-инженера. Чем раньше начнёте строить таймлайны на реальных артефактах, тем быстрее перестанете бояться инцидентов с двузначным числом затронутых машин. Если хочется пройти эту базу системно, а не выковыривать по кускам из статей — курс IB Basics на codeby.school выстраивает путь от артефактов Windows до полноценного расследования за пару месяцев, с задачами из реальных кейсов.

Эту тему и смежные навыки разбирают на практике в курсе «Реагирование на компьютерные инциденты» Codeby Academy.