Анализ вредоносного ПО: внедрение процесса в REMCOS RAT

  • Автор темы Автор темы LeSh1y777
  • Дата начала Дата начала

LeSh1y777

Пользователь
Регистрация
25/9/25
Сообщения
5,682
Репутация
49
Лайки
153
Депозит
-8.95$
Внедрение процесса — один из тех скрытных приёмов, которые вредоносные программы любят использовать, чтобы оставаться незамеченными. Внедряя вредоносный код в легитимные процессы, злоумышленники могут спрятаться, что значительно усложняет обнаружение.

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



Цель:

  • Название вредоносного ПО: REMCOS RAT (Remote Control & Surveillance) — троян удаленного доступа, используемый для скрытого удаленного управления, кражи данных и сохранения на скомпрометированных системах.
  • Хэш: 88a02967d6fa5c0eff65f71b9fae969b8125a20115c2d2ee21053832fdc2fc2b
Внедрение процесса — это метод, используемый вредоносным ПО для выполнения кода в адресном пространстве другого легитимного процесса. Это позволяет злоумышленникам избегать обнаружения, совмещая вредоносную активность с доверенными системными процессами. К распространённым методам внедрения относятся удалённое внедрение потока (Remote Thread Injection), маскировка процесса (Process Hollowing) , внедрение APC (APC Injection) и внедрение DLL (DLL Injection) , каждый из которых использует системные API для манипулирования памятью и потоком выполнения.

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

Мы шаг за шагом разберём, как происходит впрыск, что происходит под капотом и как обнаружить его с помощью правильных инструментов. Давайте приступим!

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

6a4a49_9d8c827171794fda85299c6bfee04958~mv2.png

Сразу видим эти функции:

Это важные функции Windows API, которые часто используются вредоносными программами для перечисления процессов и управления ими. Давайте разберёмся, что делает каждая функция и почему её может использовать Remcos.
Это важные функции Windows API, которые часто используются вредоносными программами для перечисления процессов и управления ими. Давайте разберёмся, что делает каждая функция и почему её может использовать Remcos.
Позвольте мне объяснить, что делают эти функции и почему они важны для анализа вредоносного ПО. Понимая, как они работают, мы можем получить более чёткое представление о том, как Remcos RAT взаимодействует с системой для внедрения процесса.

CreateToolhelp32Snapshot



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

Ссылка: Microsoft Docs – CreateToolhelp32Snapshot

Process32First и Process32Next

Эти функции позволяют вредоносному ПО пройти через каждый процесс в системе. Обычно это этап разведки, на котором вредоносное ПО:

  • Выявляет процессы, связанные с безопасностью, с целью их возможного прекращения.
  • Ищет подходящую цель для инъекции или подключения функции.
  • Отслеживает определенные приложения, которые могут обрабатывать конфиденциальные данные.
Ссылка: Microsoft Docs – Process32First | Process32Next

Анализируя эти вызовы API, мы можем начать собирать воедино информацию о том, как Remcos RAT взаимодействует с системой, выбирает цели и, в конечном итоге, реализует метод внедрения. Понимание этого поведения имеет ключевое значение для обнаружения и нейтрализации подобных угроз.

Как Remcos использует эти функции

Remcos, вероятно, использует эти API для перечисления процессов и, возможно, повышения привилегий . Это распространённый метод сбора информации о системе и подготовки к дальнейшим действиям во вредоносных программах.

  • Разведка: делая снимок и перечисляя процессы, Remcos может составить карту работающей среды, включая решения по безопасности или инструменты мониторинга, которые могут помешать ее выполнению.
  • Внедрение/перехват процесса: если он находит подходящую цель, например explorer.exe или другой процесс с высокими привилегиями, он может попытаться внедрить себя, чтобы сохранить персистентность или избежать обнаружения.
  • Тактика противодействия анализу: некоторые вредоносные программы используют перечисление процессов, чтобы проверить, запущены ли они в изолированной среде или контролируемой среде. При обнаружении инструментов анализа или отладчиков они могут изменить своё поведение, чтобы избежать обнаружения.
Функции CreateToolhelp32Snapshot, Process32First и Process32Next часто используются на начальном этапе разведки вредоносного ПО, выполняющего внедрение процессов. Этот этап настройки имеет решающее значение, поскольку закладывает основу для самой техники внедрения, которую мы рассмотрим далее.

Теперь давайте рассмотрим функцию VirtualAllocEx .

6a4a49_3307ba9eac8745289e58f69df978a308~mv2.png

VirtualAllocEx — это функция API Windows, которая позволяет процессу выделять память в адресном пространстве другого процесса. Она широко используется в легитимных приложениях для межпроцессного взаимодействия, но также часто используется вредоносным ПО для атак Process Injection . Выделяя память в удалённом процессе, злоумышленник может написать и выполнить вредоносный код внутри доверенного системного процесса, что затрудняет обнаружение.

Вредоносное ПО часто использует VirtualAllocEx вместе с другими API, такими как WriteProcessMemory и CreateRemoteThread, для внедрения и выполнения полезных нагрузок. Эта функция обеспечивает детальный контроль над выделением памяти, позволяя вредоносному ПО указывать размер, уровень защиты и расположение выделенной памяти. Это делает её критически важным компонентом многих методов внедрения.

Ссылка: Microsoft Docs – VirtualAllocEx

6a4a49_9ce9658fcddf4980bdeb1db92293e4db~mv2.png

Вот сигнатура функции для context:

  • hProcess : Дескриптор целевого процесса, в котором выделяется память.
  • lpAddress : базовый адрес области памяти, которую необходимо выделить (обычно устанавливается в NULL, чтобы позволить системе сделать выбор).
  • dwSize : Размер выделяемой памяти.
  • flAllocationType : Указывает тип выделения памяти (например, MEM_COMMIT).
  • flProtect : Задает защиту памяти, часто устанавливаемую на PAGE_EXECUTE_READWRITE во вредоносных программах, чтобы разрешить выполнение кода.
6a4a49_6d2fc73c7c844721911e18cc72ea9261~mv2.png

Теперь давайте взглянем на этот код, и я объясню его подробно, чтобы его было легче интерпретировать.

6a4a49_6250a9b4e1af4dc3b4b80c916be7f7fc~mv2.png

  • НАЖМИТЕ 0x40
    • Помещает 0x40 в стек. 0x40 соответствует PAGE_EXECUTE_READWRITE , что означает, что выделенная память будет иметь разрешения на чтение, запись и выполнение .
  • НАЖМИТЕ 0x3000
    • Помещает 0x3000 в стек. 0x3000 — это комбинация флагов MEM_COMMIT | MEM_RESERVE , что означает, что память будет выделена и зафиксирована для использования.
  • PUSH dword ptr [ESI + 0x50]
    • Помещает значение, хранящееся по адресу [ESI + 0x50], в стек. Вероятно, это дескриптор целевого процесса , полученный ранее в ходе выполнения.
  • PUSH dword ptr [ESI + 0x34]
    • Помещает в стек ещё одно значение из [ESI + 0x34]. Скорее всего, это размер выделяемой области памяти .
  • PUSH dword ptr [EBP + local_80]
    • Помещает локальную переменную (local_80) в стек. Это может быть указатель на выделенную память или дополнительные аргументы функции.
  • CALL dword ptr [KERNEL32.DLL::VirtualAllocEx]
    • Вызывает VirtualAllocEx для выделения памяти в другом процессе. Как мы уже говорили, эта функция часто используется в атаках с внедрением процесса для выделения памяти в удалённом процессе перед записью шелл-кода.
  • MOV dword ptr [EBP + local_6C], EAX
    • Сохраняет возвращаемое значение VirtualAllocEx (выделенный адрес памяти) в local_6C. Если EAX равен NULL, выделение памяти не удалось.
  • ТЕСТ EAX, EAX
    • Проверяет, выполнена ли функция успешно (EAX != 0). Если EAX равен 0, выделение памяти не удалось, и программа, скорее всего, обработает ошибку.
Из этого кода можно сделать вывод, что Remcos RAT пытается выделить исполняемую память с возможностью записи в определённом целевом процессе. Это классический шаг внедрения процесса, особенно если за ним следует вызов WriteProcessMemory (который мы видим сразу после вызова VirtualAllocEx) для копирования вредоносной нагрузки в выделенную память.

Теперь давайте посмотрим на окно декомпилированного кода, расположенное справа от нас в Ghidra.

6a4a49_28c5ead19a1e46fca10d9bc9527fef71~mv2.png

Теперь обратим внимание на другую важную функцию, обнаруженную в декомпилированном коде: NtUnmapViewOfSection . Эта функция часто используется для «выдалбливания» или удаления легитимного кода целевого процесса.

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

Вероятный рабочий процесс включает следующее:

  1. Вредоносная программа запускает законный процесс в приостановленном состоянии .
  2. Он вызывает NtUnmapViewOfSection для удаления исходных разделов памяти целевого процесса.
  3. Используя VirtualAllocEx , он выделяет новую память в адресном пространстве процесса.
  4. Затем WriteProcessMemory используется для внедрения вредоносной нагрузки.
  5. Наконец, вредоносная программа изменяет контекст выполнения , чтобы перенаправить выполнение на внедренный ею код, и возобновляет процесс.
Наблюдая за последовательностью вызовов API (VirtualAllocEx, WriteProcessMemory, NtUnmapViewOfSection), мы можем сделать вывод, что Remcos следует типичному рабочему процессу опустошения:

  1. Запустить целевой процесс – вредоносная программа запускает легитимный процесс, например svchost.exe, в приостановленном состоянии.
  2. Unmap Original Memory — вызывает NtUnmapViewOfSection для удаления законных исполняемых разделов из памяти.
  3. Выделение памяти и запись полезной нагрузки . Используя VirtualAllocEx, вредоносная программа резервирует память в процессе, а WriteProcessMemory используется для внедрения вредоносной полезной нагрузки.
  4. Изменить контекст выполнения – контекст потока корректируется, чтобы обеспечить выполнение полезной нагрузки после возобновления процесса.

    6a4a49_314cb0a7d6af42ee9481a2843eb66b3c~mv2.png

Краткое содержание

Объединяя эти наблюдения, очевидно, что Remcos использует скрытое выполнение процесса. Полный пошаговый процесс, основанный на проанализированных API, выглядит следующим образом:

  1. Создание приостановленного процесса . Доверенный или общий процесс Windows запускается в приостановленном состоянии.
  2. Удалить легитимные разделы . Вредоносная программа вызывает NtUnmapViewOfSection, чтобы удалить легитимный код из памяти.
  3. Выделение новой памяти . Для выделения записываемой и исполняемой памяти в выделенном процессе используется VirtualAllocEx.
  4. Внедрение вредоносного кода . Полезная нагрузка записывается в выделенное пространство памяти с помощью WriteProcessMemory.
  5. Возобновление и выполнение . Вредоносное ПО изменяет контекст потока, чтобы он указывал на внедренный код, а затем возобновляет процесс, позволяя своей полезной нагрузке выполняться под видом легитимного процесса.

Если вы хотите узнать обо всём этом подробно и даже больше, рекомендую записаться на наши курсы​

 
Назад
Сверху Снизу