MITRE ATT&CK T1055.003 Внедрение процесса: Перехват выполнения потоков

MITRE ATT&CK

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

Использование злоумышленниками метода Thread Execution Hijacking

Злоумышленники начинают использовать технику Thread Execution Hijacking с поиска подходящего процесса для перехвата. Это может быть процесс, запущенный с высокими привилегиями, или процесс, которому доверяют другие программы в системе. Найдя подходящий процесс, вредоносная программа приостанавливает его, разворачивает/разворачивает его память, а затем внедряет в него вредоносный шеллкод или DLL. Наконец, им нужно перенаправить выполнение потока в процессе на внедренный код.

Эта техника похожа на технику Process Hollowing, но вместо создания нового процесса в приостановленном состоянии она нацелена на поиск уже существующего процесса в целевой системе.

Ниже приведен общий жизненный цикл атаки, которому обычно следуют злоумышленники, осуществляющие Thread Execution Hijacking:

  1. Получение хэндла процесса: Атакующий получает хэндл целевого процесса, в который он хочет внедрить код. Для этого необходимо использовать API OpenProcess с соответствующими правами доступа, такими как PROCESS_VM_OPERATION, PROCESS_VM_WRITE и PROCESS_VM_READ.
  2. Приостановка потока: Получив хэндл процесса, атакующие определяют поток в этом процессе, который они хотят захватить. Затем используется API OpenThread для получения хэндла этого потока, который приостанавливается с помощью SuspendThread, чтобы предотвратить выполнение инструкций во время атаки.
  3. Выделение памяти: После успешной приостановки потока атакующий выделяет память в виртуальном адресном пространстве целевого процесса. Обычно это делается с помощью VirtualAllocEx, указывая MEM_COMMIT и PAGE_EXECUTE_READWRITE в качестве желаемого состояния и защиты памяти. Это гарантирует, что выделенная память будет как исполняемой, так и записываемой.
  4. Написание шелл-кода: Выделив память, атакующие записывают свою вредоносную полезную нагрузку (шелл-код) в выделенное пространство с помощью функции WriteProcessMemory, которая копирует данные из буфера атакующего в выделенную память в пространстве процесса цели.
  5. Перехват контекста потока: Затем атакующий перехватывает контекст выполнения потока, получая его с помощью GetThreadContext, который включает значения регистров. Регистр EIP (на архитектурах x86) или RIP (на архитектурах x86-64) в контексте устанавливается на адрес шеллкода в выделенной памяти.
  6. Манипулирование контекстом: После изменения контекста на вредоносный код используется функция SetThreadContext для применения измененного контекста к приостановленному потоку. Это изменяет поток выполнения потока на внедренный шелл-код.
  7. Возобновление потока: Наконец, атакующий возобновляет поток с помощью функции ResumeThread. Поток продолжит выполнение в новой точке входа, указанной измененным регистром EIP/RIP, тем самым выполняя вредоносный код атакующего в контексте целевого процесса.

Техника перехвата выполнения потоков часто встречается в дикой природе. В январе 2024 года сообщалось, что Lumma Stealer использует технику перехвата выполнения потоков. Злоумышленники используют закодированные PNG-файлы, чтобы избежать обнаружения и анализа вредоносного ПО. Перед расшифровкой Lumma Stealer атакующий проверяет наличие строк удаленного отладчика, таких как ollydbg, windbg и ida, вызывая GetForegorundWindow. После завершения проверок Anti-VM и Anti-Debug злоумышленники расшифровывают закодированные PNG-файлы и внедряют Lumma Stealer в целевые процессы с помощью функции SuspendThread.

В другом примере было обнаружено, что вредоносная программа Zloader внедряет CyberMesh.exe в msiexec.exe, используя технику перехвата выполнения потока. Злоумышленники использовали системные вызовы CreateUserProcess, AllocateVirtualMemory, WriteVirtualMemory, GetContextThread, SetContextThread, ProtectVirtualMemory и ResumeThread для запуска, приостановки и внедрения вредоносного ПО в msiexec.exe.

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