Эксперты из компании Security Joes представили новую технику внедрения кода в процессы, которая получила название Mockingjay. Этот метод позволяет злоумышленникам обходить EDR-решения и другие защитные продукты, добиваясь скрытого выполнения вредоносного кода в скомпрометированных системах.
Внедрение кода в процесс (process injection) — это техника выполнения произвольного кода в адресном пространстве другого запущенного процесса, которому доверяет операционная система. Это дает злоумышленникам возможность запускать вредоносный код без обнаружения.
Примерами таких внедрений являются DLL-инжекты, PE-инжекты, отраженные DLL-инжекты, перехват выполнения потока, техника process hollowing и прочие. Во всех этих случаях злоумышленникам нужно использовать API-интерфейсы Windows и различные системные вызовы, создавать процессы/потоки, осуществлять запись в память процессов и так далее. Следовательно, защитные решения могут обнаружить подозрительную активность и вмешаться в происходящее по мере необходимости.
Эксперты Security Joes заявляют, что их метод Mockingjay выгодно отличается от других тем, что не использует вызовы Windows API, не устанавливает специальные разрешения, не занимается выделением памяти (memory allocation) и даже не запускает потоки внутри целевого процесса, что сводит риск обнаружения к минимуму.
Исследователи рассказывают, что задались целью найти уязвимую DLL с RWX (Read-Write-Execute) по умолчанию, чтобы можно было изменить содержимое для загрузки вредоносного кода, не выполняя дополнительных действий, которые могли бы вызвать подозрение у защитного ПО.
В поисках подходящей библиотеки DLL аналитики обнаружили в Visual Studio 2022 Community библиотеку DLL msys-2.0.dll, которая по умолчанию имела RWX размером 16 КБ. В компании поясняют, что, используя уже существующий раздел RWX, можно воспользоваться присущей ему защитой памяти, эффективно обходя EDR.
«Такой подход не только позволяет обойти ограничения, налагаемые хуками пользовательского пространства, но и создает прочную и надежную среду для нашей техники инжектов», — рассказывают эксперты.
После этого команда исследователей разработала два разных метода инжектов: self-injection и remote process injection. При первом подходе кастомное приложение используется для прямой загрузки уязвимой DLL в адресное пространство и выполнения желаемого кода с использованием RWX. Второй подход предлагает использовать раздел RWX в уязвимой DLL для выполнения внедрения в удаленный процесс, такой как ssh.exe.
Оба метода, используемые Mockingjay, задействуют API Windows, включая LoadLibraryW, CreateProcessW и GetModuleInformation, для загрузки неправильно сконфигурированной DLL и поиска RWX-раздела. Однако EDR-решения обычно отслеживают API WriteProcessMemory, NtWriteVirtualMemory, CreateRemoteThread и NtCreateThreadEx, которые чаще используются в подобных атаках, а значит, техника Mockingjay с меньшей вероятностью спровоцирует срабатывание защитных механизмов.