MITRE ATT&CK T1055.002 Внедрение процесса: Инъекция переносимых исполняемых файлов

MITRE ATT&CK

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

Что такое переносимый исполняемый файл (PE)?

Portable Executable (PE) - это формат файлов для исполняемых файлов, объектного кода и библиотек DLL в операционных системах Windows. PE предоставляет операционной системе стандартизированный способ управления и выполнения приложений, включая обработку различных аспектов кода и данных, задействованных в сложных программах. Формат PE используется в файлах с такими расширениями, как .exe, .dll, .sys, .ocx и .scr, что делает его необходимым для функциональности приложений Windows.

Формат PE разработан как переносимый, то есть он может выполняться на разных версиях Windows без изменений. Он включает в себя различные секции, в которых хранится исполняемый код, данные, импорт, экспорт и ресурсы, такие как иконки или меню. Некоторые из его ключевых компонентов включают заголовок DOS, который поддерживает обратную совместимость со старыми системами. Другой ключевой компонент - заголовок PE. Он содержит метаданные об исполняемом файле и такие разделы, как .text, .data и .rsrc, которые содержат код, переменные и ресурсы.

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

Атаки с использованием PE-инъекций проходят по пути, схожему с инъекциями DLL. Разница заключается в использовании функции WriteProcessMemory. Вместо того чтобы записывать путь к вредоносной DLL в выделенную память целевого процесса, злоумышленники пишут свой вредоносный код в этой памяти.

Хотя инъекция PE кажется незаметной, она сопряжена с трудностями. Когда злоумышленники внедряют свой PE в память целевого процесса, внедренный код получает непредсказуемый новый базовый адрес. Чтобы преодолеть эту проблему, злоумышленники разрабатывают свои вредоносные программы таким образом, чтобы найти адрес таблицы перемещений хост-процесса и определить абсолютные адреса клонированного образа с помощью цикла перебора дескрипторов перемещений.

Ниже представлен общий жизненный цикл атаки PE Injection:

  1. Получение хэндла процесса: Атакующие получают хэндл целевого процесса с помощью Windows API OpenProcess с соответствующими правами доступа, что позволяет им выполнять такие операции, как манипуляции с памятью в целевом процессе.
  2. Выбор и подготовка PE-файла: выбирается подходящий PE-файл для инъекции. Атакующие определяют предпочтительный адрес базы образа PE - адрес, по которому код ожидает загрузки в память. Определяется размер PE, необходимый для его работы в памяти.
  3. Выделение локальной памяти и копирование PE: В локальном процессе атакующего выделяется блок памяти, куда копируется выбранный образ PE. Это действие позволяет атакующим при необходимости модифицировать образ PE перед внедрением, в том числе разместить новые базовые адреса или разрешить адреса импортированных функций.
  4. Выделение памяти в целевом процессе: Используя VirtualAllocEx, атакующие выделяют память в адресном пространстве целевого процесса, создавая место для инжектируемого PE-файла. Это пространство должно быть достаточным для размещения всего PE-файла и иметь разрешения на выполнение-чтение-запись. Базовый адрес этого блока памяти называется target_address.
  5. Вычисление дельты и исправление PE: вычисляется дельта между адресом локальной копии (local_address) и целевым распределением (target_address), чтобы помочь любым необходимым перемещениям внутри PE-файла для соответствия целевому адресному пространству. Затем PE-файл исправляется или корректируется на основе дельты, чтобы гарантировать, что он будет выполняться правильно при загрузке по адресу target_address, а не по своему предпочтительному базовому адресу.
  6. Внедрение PE в целевой процесс: Исправленный PE-файл передается из локального процесса атакующего в выделенный блок памяти целевого процесса с помощью WriteProcessMemory. Это обеспечивает правильное расположение всего образа в памяти, где он может быть выполнен.
  7. Выполнение инжектированного PE: в целевом процессе создается удаленный поток с помощью CreateRemoteThread, точка входа которого устанавливается на функцию InjectionEntryPoint теперь уже инжектированного PE-файла. Это инициирует выполнение инжектированного PE, эффективно запуская вредоносный код в контексте целевого процесса.

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

Атака с внедрением переносимых исполняемых файлов (PE) часто используется в дикой природе. В августе 2024 года злоумышленники сообщили о распространении вредоносной программы-дроппера под названием SystemBC. Вредоносная полезная нагрузка доставлялась в виде вложения в электронное письмо под названием YandexDiskSetup.exe. Когда пользователь запускает этот файл, вредоносная программа разворачивает маяк через локальную PE-инъекцию. Затем маяк связывается с C2-сервером злоумышленника, чтобы загрузить и установить SystemBC на скомпрометированную систему.

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