Внедрение процесса — один из тех скрытных приёмов, которые вредоносные программы любят использовать, чтобы оставаться незамеченными. Внедряя вредоносный код в легитимные процессы, злоумышленники могут спрятаться, что значительно усложняет обнаружение.
В этой статье я расскажу вам о реальном образце вредоносного ПО, использующем внедрение процесса, и подробно объясню, как это работает.
Внедряя код в легитимный процесс, вредоносное ПО может обходить механизмы безопасности , скрываться от криминалистических инструментов и сохранять активность. Аналитики безопасности обнаруживают эти методы, отслеживая подозрительные вызовы API, анализируя области памяти и проверяя поведение процесса. Раннее выявление внедрения процесса критически важно для предотвращения повышения привилегий и скрытого сохранения активности в скомпрометированных системах.
Мы шаг за шагом разберём, как происходит впрыск, что происходит под капотом и как обнаружить его с помощью правильных инструментов. Давайте приступим!
Мы собираемся провести базовый статический анализ образца вредоносного ПО, чтобы выявить внедрение процесса, и для этого мы загрузим наш образец в Ghidra и откроем ссылки на символы, чтобы изучить вызовы функций и манипуляции с памятью, связанные с техникой внедрения.
Сразу видим эти функции:
Это важные функции Windows API, которые часто используются вредоносными программами для перечисления процессов и управления ими. Давайте разберёмся, что делает каждая функция и почему её может использовать Remcos.
Позвольте мне объяснить, что делают эти функции и почему они важны для анализа вредоносного ПО. Понимая, как они работают, мы можем получить более чёткое представление о том, как Remcos RAT взаимодействует с системой для внедрения процесса.
Эта функция создаёт снимок всех запущенных процессов, потоков, куч и модулей в системе. Вредоносное ПО часто использует его для получения полного списка активных процессов перед выбором цели для внедрения. Получив снимок, оно может перебирать процессы с помощью Process32First и Process32Next.
Ссылка: Microsoft Docs – CreateToolhelp32Snapshot
Анализируя эти вызовы API, мы можем начать собирать воедино информацию о том, как Remcos RAT взаимодействует с системой, выбирает цели и, в конечном итоге, реализует метод внедрения. Понимание этого поведения имеет ключевое значение для обнаружения и нейтрализации подобных угроз.
Теперь давайте рассмотрим функцию VirtualAllocEx .
VirtualAllocEx — это функция API Windows, которая позволяет процессу выделять память в адресном пространстве другого процесса. Она широко используется в легитимных приложениях для межпроцессного взаимодействия, но также часто используется вредоносным ПО для атак Process Injection . Выделяя память в удалённом процессе, злоумышленник может написать и выполнить вредоносный код внутри доверенного системного процесса, что затрудняет обнаружение.
Вредоносное ПО часто использует VirtualAllocEx вместе с другими API, такими как WriteProcessMemory и CreateRemoteThread, для внедрения и выполнения полезных нагрузок. Эта функция обеспечивает детальный контроль над выделением памяти, позволяя вредоносному ПО указывать размер, уровень защиты и расположение выделенной памяти. Это делает её критически важным компонентом многих методов внедрения.
Ссылка: Microsoft Docs – VirtualAllocEx
Вот сигнатура функции для context:
Теперь давайте взглянем на этот код, и я объясню его подробно, чтобы его было легче интерпретировать.
Теперь давайте посмотрим на окно декомпилированного кода, расположенное справа от нас в Ghidra.
Теперь обратим внимание на другую важную функцию, обнаруженную в декомпилированном коде: NtUnmapViewOfSection . Эта функция часто используется для «выдалбливания» или удаления легитимного кода целевого процесса.
Удалив исходный исполняемый раздел, Remcos может заменить его собственной вредоносной нагрузкой. Этот метод позволяет вредоносному ПО работать под видом легитимного процесса, расширяя его возможности по сокрытию данных.
Вероятный рабочий процесс включает следующее:
В этой статье я расскажу вам о реальном образце вредоносного ПО, использующем внедрение процесса, и подробно объясню, как это работает.
Цель:
- Название вредоносного ПО: REMCOS RAT (Remote Control & Surveillance) — троян удаленного доступа, используемый для скрытого удаленного управления, кражи данных и сохранения на скомпрометированных системах.
- Хэш: 88a02967d6fa5c0eff65f71b9fae969b8125a20115c2d2ee21053832fdc2fc2b
Внедряя код в легитимный процесс, вредоносное ПО может обходить механизмы безопасности , скрываться от криминалистических инструментов и сохранять активность. Аналитики безопасности обнаруживают эти методы, отслеживая подозрительные вызовы API, анализируя области памяти и проверяя поведение процесса. Раннее выявление внедрения процесса критически важно для предотвращения повышения привилегий и скрытого сохранения активности в скомпрометированных системах.
Мы шаг за шагом разберём, как происходит впрыск, что происходит под капотом и как обнаружить его с помощью правильных инструментов. Давайте приступим!
Мы собираемся провести базовый статический анализ образца вредоносного ПО, чтобы выявить внедрение процесса, и для этого мы загрузим наш образец в Ghidra и откроем ссылки на символы, чтобы изучить вызовы функций и манипуляции с памятью, связанные с техникой внедрения.
Сразу видим эти функции:
Позвольте мне объяснить, что делают эти функции и почему они важны для анализа вредоносного ПО. Понимая, как они работают, мы можем получить более чёткое представление о том, как Remcos RAT взаимодействует с системой для внедрения процесса.
CreateToolhelp32Snapshot
Эта функция создаёт снимок всех запущенных процессов, потоков, куч и модулей в системе. Вредоносное ПО часто использует его для получения полного списка активных процессов перед выбором цели для внедрения. Получив снимок, оно может перебирать процессы с помощью Process32First и Process32Next.
Ссылка: Microsoft Docs – CreateToolhelp32Snapshot
Process32First и Process32Next
Эти функции позволяют вредоносному ПО пройти через каждый процесс в системе. Обычно это этап разведки, на котором вредоносное ПО:- Выявляет процессы, связанные с безопасностью, с целью их возможного прекращения.
- Ищет подходящую цель для инъекции или подключения функции.
- Отслеживает определенные приложения, которые могут обрабатывать конфиденциальные данные.
Анализируя эти вызовы API, мы можем начать собирать воедино информацию о том, как Remcos RAT взаимодействует с системой, выбирает цели и, в конечном итоге, реализует метод внедрения. Понимание этого поведения имеет ключевое значение для обнаружения и нейтрализации подобных угроз.
Как Remcos использует эти функции
Remcos, вероятно, использует эти API для перечисления процессов и, возможно, повышения привилегий . Это распространённый метод сбора информации о системе и подготовки к дальнейшим действиям во вредоносных программах.- Разведка: делая снимок и перечисляя процессы, Remcos может составить карту работающей среды, включая решения по безопасности или инструменты мониторинга, которые могут помешать ее выполнению.
- Внедрение/перехват процесса: если он находит подходящую цель, например explorer.exe или другой процесс с высокими привилегиями, он может попытаться внедрить себя, чтобы сохранить персистентность или избежать обнаружения.
- Тактика противодействия анализу: некоторые вредоносные программы используют перечисление процессов, чтобы проверить, запущены ли они в изолированной среде или контролируемой среде. При обнаружении инструментов анализа или отладчиков они могут изменить своё поведение, чтобы избежать обнаружения.
Теперь давайте рассмотрим функцию VirtualAllocEx .
VirtualAllocEx — это функция API Windows, которая позволяет процессу выделять память в адресном пространстве другого процесса. Она широко используется в легитимных приложениях для межпроцессного взаимодействия, но также часто используется вредоносным ПО для атак Process Injection . Выделяя память в удалённом процессе, злоумышленник может написать и выполнить вредоносный код внутри доверенного системного процесса, что затрудняет обнаружение.
Вредоносное ПО часто использует VirtualAllocEx вместе с другими API, такими как WriteProcessMemory и CreateRemoteThread, для внедрения и выполнения полезных нагрузок. Эта функция обеспечивает детальный контроль над выделением памяти, позволяя вредоносному ПО указывать размер, уровень защиты и расположение выделенной памяти. Это делает её критически важным компонентом многих методов внедрения.
Ссылка: Microsoft Docs – VirtualAllocEx
Вот сигнатура функции для context:
- hProcess : Дескриптор целевого процесса, в котором выделяется память.
- lpAddress : базовый адрес области памяти, которую необходимо выделить (обычно устанавливается в NULL, чтобы позволить системе сделать выбор).
- dwSize : Размер выделяемой памяти.
- flAllocationType : Указывает тип выделения памяти (например, MEM_COMMIT).
- flProtect : Задает защиту памяти, часто устанавливаемую на PAGE_EXECUTE_READWRITE во вредоносных программах, чтобы разрешить выполнение кода.
Теперь давайте взглянем на этот код, и я объясню его подробно, чтобы его было легче интерпретировать.
- НАЖМИТЕ 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, выделение памяти не удалось, и программа, скорее всего, обработает ошибку.
Теперь давайте посмотрим на окно декомпилированного кода, расположенное справа от нас в Ghidra.
Теперь обратим внимание на другую важную функцию, обнаруженную в декомпилированном коде: NtUnmapViewOfSection . Эта функция часто используется для «выдалбливания» или удаления легитимного кода целевого процесса.
Удалив исходный исполняемый раздел, Remcos может заменить его собственной вредоносной нагрузкой. Этот метод позволяет вредоносному ПО работать под видом легитимного процесса, расширяя его возможности по сокрытию данных.
Вероятный рабочий процесс включает следующее:
- Вредоносная программа запускает законный процесс в приостановленном состоянии .
- Он вызывает NtUnmapViewOfSection для удаления исходных разделов памяти целевого процесса.
- Используя VirtualAllocEx , он выделяет новую память в адресном пространстве процесса.
- Затем WriteProcessMemory используется для внедрения вредоносной нагрузки.
- Наконец, вредоносная программа изменяет контекст выполнения , чтобы перенаправить выполнение на внедренный ею код, и возобновляет процесс.
- Запустить целевой процесс – вредоносная программа запускает легитимный процесс, например svchost.exe, в приостановленном состоянии.
- Unmap Original Memory — вызывает NtUnmapViewOfSection для удаления законных исполняемых разделов из памяти.
- Выделение памяти и запись полезной нагрузки . Используя VirtualAllocEx, вредоносная программа резервирует память в процессе, а WriteProcessMemory используется для внедрения вредоносной полезной нагрузки.
- Изменить контекст выполнения – контекст потока корректируется, чтобы обеспечить выполнение полезной нагрузки после возобновления процесса.
Краткое содержание
Объединяя эти наблюдения, очевидно, что Remcos использует скрытое выполнение процесса. Полный пошаговый процесс, основанный на проанализированных API, выглядит следующим образом:- Создание приостановленного процесса . Доверенный или общий процесс Windows запускается в приостановленном состоянии.
- Удалить легитимные разделы . Вредоносная программа вызывает NtUnmapViewOfSection, чтобы удалить легитимный код из памяти.
- Выделение новой памяти . Для выделения записываемой и исполняемой памяти в выделенном процессе используется VirtualAllocEx.
- Внедрение вредоносного кода . Полезная нагрузка записывается в выделенное пространство памяти с помощью WriteProcessMemory.
- Возобновление и выполнение . Вредоносное ПО изменяет контекст потока, чтобы он указывал на внедренный код, а затем возобновляет процесс, позволяя своей полезной нагрузке выполняться под видом легитимного процесса.