EVTX gap analysis: иногда отсутствие событий важнее находки
Синтетический research-shot: схема проблемы, контроля, evidence и ретеста в фирменной лабораторной стилистике Virusologia.
Коротко: Forensic обзор полезен не только тем, что он нашёл, но и тем, что он не должен был потерять. Gap analysis помогает заметить, что наблюдаемость сама стала частью инцидента.

Проблема

При первом проходе по EVTX очень легко концентрироваться на hit-ах Sigma и ключевых Event ID. Но иногда главный сигнал - это не наличие подозрительного события, а внезапное отсутствие ожидаемых событий в критичный момент.

Если команда не смотрит на пустоты, она может пропустить tampering, service crash, отключение канала, log retention issue или переход атакующего в менее наблюдаемую плоскость.

Решение

Gap analysis нужен как отдельный шаг: baseline по объёму событий, expected chain между ключевыми логами и проверка, не исчезла ли часть картины именно в момент активности.

Инструменты вроде Chainsaw/Hayabusa полезны не только быстрым поиском совпадений, но и способностью ускорить first-response timeline, на фоне которой gaps становятся заметнее.

Что проверить руками

  • Сравнить объём событий по ключевым каналам до, во время и после suspicious window.
  • Проверить каналы Security, Sysmon-like, PowerShell, TaskScheduler, Defender.
  • Отметить неожиданные нули, резкие просадки и нелогичные разрывы цепочки событий.
  • Сопоставить gaps с service health, retention settings и признаками tampering.

Типичные ошибки

  • Считать отсутствие hit-ов признаком чистой системы.
  • Не проверять здоровье самого логирования.
  • Игнорировать объём и continuity, концентрируясь только на конкретных Event ID.

Defensive checklist

  • Есть baseline по объёму событий.
  • Ключевые каналы проверяются не только на hit, но и на continuity.
  • Gaps сопоставлены с health и tampering-гипотезами.
  • Таймлайн фиксирует не только события, но и подозрительные пустоты.

Безопасный пример кода

Простой счётчик объёма EVTX по временным окнам. Пример рассчитан на owned/lab-среду и показывает инженерную логику проверки, а не эксплуатационную цепочку.

from collections import Counter


def bucket(events):
    counts = Counter()
    for event in events:
        counts[event["hour_bucket"]] += 1
    return counts

Как это должно попасть в отчёт

  • Где именно логовая картина оказалась неполной.
  • Как gap влияет на confidence расследования.
  • Ретест: аналогичный провал в наблюдаемости поднимает отдельный сигнал.
Этическая рамка: материал предназначен для defensive security, исследования собственных систем, controlled labs и подготовки remediation. Здесь нет вредоносных payload-цепочек, persistence-инструкций и шагов для несанкционированного доступа.