MITRE ATT&CK T1055.012 - Внедрение процесса: Пустые процессы

MITRE ATT&CK

Пустые процессы (Process Hollowing) - это техника инъекции в процесс, которую злоумышленники обычно используют для обхода защиты, основанной на процессах, путем внедрения вредоносного кода в приостановленный или «полый» процесс. Эта техника предполагает создание процесса в приостановленном состоянии, затем разворачивание или вырезание его памяти и замену ее вредоносным кодом. Это позволяет злоумышленнику выполнить свой код в контексте целевого процесса.

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

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

Ниже приведен пример атаки «Пустые процессы»:

  1. Создание приостановленного процесса: На этом начальном этапе создается приостановленный процесс, который злоумышленники впоследствии будут использовать для создания пустоты. Для создания нового процесса вредоносная программа использует функцию CreateProcess. Как уже говорилось, эта атака включает в себя выделение памяти приостановленного процесса. Таким образом, вредоносная программа приостанавливает основной поток вновь созданного процесса с помощью опции CREATE_SUSPEND, используемой во флаге fdwCreate.
  2. Вытеснение легитимного кода: Вредоносное ПО вытесняет легитимный код из памяти приостановленного процесса. Для этого используются определенные вызовы API, такие как ZwUnmapViewOfSection или NtUnmapViewOfSection. Вредоносная программа вызывает функцию ZwUnmapViewOfSection, чтобы удалить ранее отображенное представление раздела из виртуального адресного пространства целевого процесса. Важно добавить, что функция ZwUnmapViewOfSection вызывается из режима ядра, то есть она не предназначена для вызова непосредственно из пользовательского режима. Чтобы разгруппировать представление раздела из виртуального адресного пространства целевого процесса из пользовательского режима, злоумышленникам следует использовать функцию NtUnmapViewOfSection.
  3. Выделение памяти в целевом процессе: Вредоносное ПО выделяет память в целевом процессе с помощью функции VirtualAllocEx. Важно отметить, что вредоносное ПО использует параметр flProtect, чтобы убедиться, что код помечен как пригодный для записи и исполняемый.
  4. Запись шеллкода в выделенную память: Злоумышленник использует функцию WriteProcessMemory для записи вредоносного кода (также известного как шелл-код) в выделенную память внутри пустого процесса.
  5. Изменение защиты памяти: Вредоносная программа вызывает функцию VirtualProtectEx для изменения защиты памяти секций кода и данных в целевом процессе, чтобы она выглядела нормальной, то есть память в этих секциях будет помечена как доступная для чтения и, в случае «Read/Execute», как исполняемая.
  6. Получение контекста целевого потока: Контекст целевого потока извлекается с помощью GetThreadContext.
  7. Обновление указателя инструкций целевого потока: Вредоносная программа обновляет указатель инструкций целевого потока, указывая на шелл-код, написанный ею на четвертом шаге. После этого вредоносная программа фиксирует новый контекст перехваченного потока с помощью SetThreadContext.
  8. Возобновление приостановленного процесса: Вредоносная программа использует функцию ResumeThread, чтобы возобновить приостановленный процесс и запустить в нем шелл-код.

В апреле 2024 года сообщалось, что REMCOS RAT использует пустые процессы для копирования себя в iexplore.exe. Используя API CreateProcessW, вредоносная программа запускает целевой процесс в приостановленном состоянии и получает его контекст потока через API GetThreadContext. Затем вредоносная программа использует API ZwCreateSection и ZwMapViewOfSection для создания и отображения общей памяти в целевом процессе, а также хэндла удаленного процесса. Наконец, вредоносная программа устанавливает контекст потока с новой точкой входа, указывающей на точку входа REMCOS, и возобновляет выполнение процесса, успешно завершая внедрение процесса с помощью пустого процесса.

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