T1497.03: Анализ временных характеристик (Time Based Checks) в MITRE ATT&CK

MITRE ATT&CK

T1497.03 - «Анализ временных характеристик» (Time Based Checks) - является подтехникой в рамках более общей техники «Обход виртуализации и песочниц» (T1497) в классификации MITRE ATT&CK. Она описывает метод обхода песочниц (изолированных сред), при котором злоумышленники полагаются на временные характеристики системы, чтобы определить, выполняется ли вредоносное ПО на реальном физическом хосте или в автоматизированной аналитической среде.

Вместо анализа системных артефактов или шаблонов взаимодействия с пользователем, атакующие оценивают такие показатели, как время работы системы с момента загрузки (uptime), значения таймеров и то, как течет время в целом. Эти индикаторы могут выдать среду анализа, которая либо существует очень недолго, либо манипулирует временем, чтобы ускорить выполнение и проверку вредоносного кода.

Использование T1497.03 злоумышленниками

Злоумышленники используют анализ временных характеристик, чтобы избежать обнаружения песочницами или виртуальными средами. Вредоносное ПО, реализующее такие проверки, часто вводит преднамеренные задержки выполнения, используя функции сна (sleep), циклы ожидания или длительные безвредные операции, чтобы пережить ограниченное по времени время работы инструментов песочницы. В некоторых случаях код многократно вызывает API-функции, связанные со временем, или выполняет циклические операции, чтобы проверить, соответствует ли прошедшее время реальным ожиданиям или не выявляет ли оно ускоренное время, часто используемое аналитическими платформами.

Если наблюдаемое поведение времени отклоняется от того, что ожидалось бы на физической системе, вредоносная программа может задержать, изменить или полностью прекратить свою вредоносную активность. Это позволяет ей избежать обнаружения и оставаться в спящем режиме до тех пор, пока она не попадет в доверенную среду, тем самым продлевая срок своей "жизни".

Примеры процедур CPUID, используемых злоумышленниками

После двух лет отсутствия в Топ-10 (2024 и 2025), техника «Обход виртуализации и песочниц» вновь вошла в число наиболее часто используемых методов.

Один из наблюдаемых примеров процедуры получен в результате анализа вредоносной программы Blitz, которая использует проверку для обхода песочниц, основанную на замерах времени, аналогичную подтехнике «Системные проверки». Было замечено, что Blitz использует сравнение времени выполнения операций для выявления виртуализированных сред.

В частности, вредоносная программа измеряет время выполнения определенных операций, например, 1 000 000 итераций цикла, и сравнивает результаты между основным потоком и второстепенным потоком, выполняющим операции с плавающей запятой, чтобы выявить аномальное временное поведение.

Основной поток с циклом CPUID

Поток Назначение Используемая инструкция
Основной поток Выступает в роли цикла замера времени. CPUID. Эта инструкция обычно выполняется быстро на физическом оборудовании, но в виртуальной машине может перехватываться и выполняться дольше, внося измеримые временные различия.
Второй поток Выполняет большое количество вычислений с плавающей запятой. fyl2xp1 (инструкция для работы с плавающей запятой). Переменная global_count увеличивается при каждом успешном выполнении этой инструкции в цикле.

Вредоносная программа запускает основной поток на фиксированное количество итераций (count = 1000000). Инструкция CPUID в основном потоке используется для "активного ожидания" и синхронизации. Пока работает основной поток, второй поток занят выполнением инструкций с плавающей запятой, постоянно увеличивая переменную global_count.

Второй поток с циклом операций с плавающей запятой

После завершения основного цикла вычисляется результат:

resultant = (10 * global_count) / 1000000.0

или, как в коде: global_count *= 10; и затем деление.

Итоговое значение resultant представляет собой коэффициент, показывающий, сколько операций с плавающей запятой выполнил второй поток по отношению к итерациям цикла основного потока.

Затем программа оценивает выражение: return resultant > 5.0.

  • Если система реальная, невиртуализированная, потоки выполняются с определенной скоростью, и результирующее значение, скорее всего, будет больше 5.0.
  • Если система является виртуальной машиной или песочницей, гипервизор может вносить задержки или несоответствия в обработку одновременного выполнения инструкций CPUID и операций с плавающей запятой. Это замедляет способность второго потока увеличивать global_count, в результате чего финальное вычисленное значение resultant становится меньше 5.0, что сигнализирует об обнаружении виртуальной среды.

Если проверка подтверждает выполнение в виртуальной машине, вредоносная программа завершает работу или отображает поддельное сообщение об ошибке.

Примеры процедур, использования время работы системы злоумышленниками

Злоумышленники могут оценивать время работы системы (аптайм), чтобы определить, выполняется ли вредоносное ПО в виртуальной среде или песочнице. Один из распространенных подходов включает запрос счетчика «Время работы системы» через библиотеку Performance Data Helper (PDH) в Windows. Если сообщаемое время работы значительно короче ожидаемого, вредоносная программа может сделать вывод, что она выполняется в аналитической среде, и либо остановить выполнение, либо изменить свое поведение.

Для вычисления времени работы злоумышленники часто полагаются на функцию GetTickCount().

Примечание: Функция GetTickCount() в Windows начинает отсчет после загрузки системы. Вредоносное ПО может использовать эту функцию для определения того, как долго работает система, и получить временное значение для каждого цикла счетчика временных меток.

Например, согласно отчету по анализу вредоносного ПО за июль, опубликованному CISA, злоумышленники до сих пор используют GetTickCount() для проверки выполнения в виртуальной среде.

Полезная нагрузка Qbot включает характерную проверку для защиты от отладки с использованием API GetTickCount().

Анализ упакованных и распакованных образцов IcedID показывает, что это вредоносное ПО также использует функцию GetTickCount().

Отложенное выполнение (Delayed Execution)

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

Например, обход сна — распространенный трюк, который мы видим в вредоносном ПО. Злоумышленники могут использовать троян, который вызывает метод SleepEx() с параметром тайм-аута в 10 минут, прежде чем выполнять какие-либо вредоносные действия или запускать полезную нагрузку. Существует множество функций, которые злоумышленники могут использовать для обхода сна:

  • Sleep()
  • WaitForSingleObject()
  • WaitForMultipleObjects()
  • WaitForSingleObjectEx()
  • WaitForMultipleObjectsEx()

2022 год был еще одним годом, когда злоумышленники активно использовали методы уклонения, основанные на времени. Например, анализ разрушительного вредоносного ПО WhisperGate показывает, что злоумышленники использовали следующую команду PowerShell для обхода антивирусов (AV) [5]:

Обратите внимание, что командлет Start-Sleep используется для приостановки активности на 10 секунд. Чтобы заставить его "спать" 20 секунд, они выполняют команду дважды.

Также было обнаружено, что вредоносное ПО Bumblebee использует функцию SleepEx().

Кратко: шелл-код внедряется в приостановленный процесс, и исходная точка входа заменяется новой функцией - SleepEx.

Известно, что StrifeWater RAT, новый троян, используемый в основном иранской APT-группировкой Moses Staff, обновляет время ожидания ответов вредоносного ПО на 20-22 секунды (по умолчанию).

Загрузчик SaintBot.NET, который в основном использовался в целевых фишинговых атаках на организации в Украине, также применяет методы уклонения, основанные на времени.

В приведенном выше коде загрузчик начинает с выполнения одной команды PowerShell, которая вызывает выполнение программы cmd.exe с аргументом timeout 20. Это вызывает задержку в 20 секунд, прежде чем загрузчик продолжит свое выполнение.

Комментарии: 0