Антикриминалистика и как с ней бороться

Грамотный атакующий не только проникает, но и заметает следы — задача криминалиста в том, чтобы заметить само заметание.

Антикриминалистика (anti-forensics) — приёмы, которыми атакующий пытается затруднить или сорвать расследование: уничтожить, скрыть или фальсифицировать данные, чтобы аналитик не смог восстановить ход событий.

Этот урок — оборонительный по своей сути: мы изучаем методы сокрытия следов не чтобы их применять, а чтобы распознавать их работу и не дать обмануть себя. Понимание антикриминалистики делает аналитика устойчивым: он перестаёт принимать «чистую» картину за отсутствие инцидента и учится видеть подозрительные пустоты. Все описанные техники рассматриваются исключительно как объект обнаружения. Намеренное уничтожение или фальсификация информации с целью скрыть преступление — отягчающее обстоятельство; работа защитника — обратная.

Зачем это знать защитнику

Если бы атакующие не заметали следы, расследование сводилось бы к чтению логов. Но зрелый злоумышленник целенаправленно мешает анализу: чистит журналы, подделывает временные метки, прячет и шифрует данные. Аналитик, который этого не ожидает, делает ложный вывод «всё чисто» там, где на самом деле кто-то постарался. Поэтому ключевой навык — читать отсутствие данных как сигнал. Пробел в журнале, файл с невозможной хронологией, зашифрованный том на машине, где шифрования быть не должно, — всё это не «ничего», а след самого сокрытия.

Очистка логов — и как её заметить

Самый частый приём — удалить или обнулить журналы, чтобы спрятать действия. Но у самой очистки есть следы.

Как это выглядит

В Windows очистка журнала событий сама порождает событие: запись 1102 «журнал безопасности был очищен» в Security, событие 104 при очистке других журналов. В Linux атакующий может урезать файл или подменить его, но остаются косвенные признаки.

Признаки очистки журналов (что ищет аналитик):
  - Windows EventID 1102 / 104 — факт очистки сам залогирован
  - «дыра» во времени: непрерывный поток событий внезапно обрывается
  - размер лог-файла 0 или резко меньше ожидаемого
  - несоответствие между локальным логом и его копией в SIEM/на коллекторе
  - время модификации лог-файла не совпадает с временем последней записи в нём

Главный контрприём виден в списке: если логи в реальном времени уезжают на отдельный коллектор (SIEM), то локальная очистка уже бесполезна — копия событий лежит там, куда атакующий не дотянулся. Поэтому «дыра» в локальном журнале при наличии записей в SIEM — это и есть пойманное заметание.

Тайм-стомпинг — и его выдаёт сама файловая система

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

Как это обнаруживают

На NTFS у каждого файла не один набор времён, а два: в атрибуте $STANDARD_INFORMATION (его показывает проводник и его легко изменить) и в $FILE_NAME (обновляется ядром, изменить штатными средствами трудно). Тайм-стомпинг обычно правит первый и забывает про второй — возникает рассинхрон, который и ловит аналитик.

Один файл, два источника времени на NTFS:

  $STANDARD_INFORMATION  Created: 2024-01-10 09:00   <- подделано
  $FILE_NAME             Created: 2026-01-15 14:05   <- реальное

  Расхождение -> признак timestomping.
Доп. сигналы: метки с нулями в долях секунды (ровно :00.0000000),
время создания ПОЗЖЕ времени изменения, несовпадение с MFT-соседями.

Дополнительно помогает перекрёстная сверка с независимыми источниками из прошлого урока: запись в журнале о запуске процесса, ссылка в реестре, запись в MFT по номеру. Если файл «создан два года назад», но впервые упоминается в системе вчера — метка подделана.

Шифрование и сокрытие данных

Третье направление — сделать данные нечитаемыми или незаметными. Сюда входят шифрование контейнеров и дисков, упаковка вредоноса упаковщиком (packer), сокрытие данных в неиспользуемых областях, стеганография (прятать данные внутри картинок). С точки зрения защитника важно не «вскрыть любой ценой», а зафиксировать сам факт и оценить, что это меняет.

Косвенные признаки сокрытия/шифрования:
  - файл/раздел с высокой энтропией без явного формата (выглядит как «шум»)
  - процесс или том шифрования там, где его быть не должно
  - аномально большие «пустые» области, slack-пространство с данными
  - исполняемый файл, у которого почти нет читаемых строк (признак упаковки)

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

Как это работает под капотом

У большинства антикриминалистических приёмов есть фундаментальная слабость: система избыточна. Одно и то же событие оставляет след в нескольких местах, и злоумышленнику нужно «подчистить» их все синхронно — что почти невозможно. Удалил локальный лог — остался коллектор. Подделал $STANDARD_INFORMATION — забыл про $FILE_NAME и MFT. Стёр файл — данные остались в неразмеченных секторах до перезаписи (отсюда работает file carving). Зашифровал том — но сам факт наличия криптоконтейнера и время его создания скрыть труднее. Криминалистика на этом и стоит: атакующий должен быть безупречен во всех источниках одновременно, а защитнику достаточно одной несостыковки. Поэтому стратегия защиты — увеличивать избыточность и выносить улики за пределы досягаемости: чем больше независимых, недоступных атакующему источников, тем труднее замести следы незаметно.

Как защититься

1. Выносите логи за пределы машины. Централизованный сбор в SIEM/на защищённый коллектор в реальном времени обесценивает локальную очистку — копия уже не у атакующего.

2. Защищайте журналы. Ограничьте права на изменение логов, включите аудит самой очистки (события 1102/104 — ваши друзья), храните на носителе только для добавления (append-only) где возможно.

3. Сверяйте времена из нескольких источников. Не доверяйте одной метке. $FILE_NAME против $STANDARD_INFORMATION, журнал против файловой системы, локальные часы против NTP — рассинхрон выдаёт подделку.

4. Читайте пустоту как сигнал. Дыра в логах, файл без истории, том высокой энтропии — это не «ничего», а след сокрытия. Подозрительная чистота требует объяснения.

5. Честно фиксируйте пределы. Если данные стойко зашифрованы и ключа нет — так и пишут в отчёте. Достоверность важнее красивого вывода.

Итоги

  • Антикриминалистика — это очистка логов, тайм-стомпинг и шифрование/сокрытие; изучаем, чтобы обнаруживать, а не применять.
  • Очистка журнала сама оставляет след (Windows 1102/104) и бессильна против копии в SIEM.
  • Тайм-стомпинг выдаёт рассинхрон $STANDARD_INFORMATION и $FILE_NAME и перекрёстная сверка с журналами и MFT.
  • Шифрование/упаковку выдают высокая энтропия и аномалии; факт сокрытия фиксируют, даже если содержимое не вскрыть.
  • Сила защитника — в избыточности источников: атакующему нужно подчистить всё, аналитику достаточно одной несостыковки; намеренное уничтожение улик отягчает ответственность.
Проверьте себя
1. На NTFS у файла время создания в $STANDARD_INFORMATION — двухлетней давности, а в $FILE_NAME — вчерашнее. О чём это говорит аналитику?
AО тайм-стомпинге: метку $STANDARD_INFORMATION подделали, а труднее изменяемую $FILE_NAME — нет
BО нормальной работе системы: эти времена всегда различаются на годы
CО том, что файл был зашифрован стойким алгоритмом
DО том, что журнал событий был успешно очищен
2. Почему централизованный сбор журналов в SIEM в реальном времени так эффективен против заметания следов?
AКопия событий лежит вне досягаемости атакующего, поэтому локальная очистка журнала её не затрагивает
BSIEM не даёт вредоносному коду запуститься на машине
CSIEM автоматически расшифровывает любые зашифрованные злоумышленником тома
DПосле настройки SIEM локальные журналы больше не ведутся