Системные вызовы Ptrace (Ptrace System Calls) - это техника внедрения процесса, используемая злоумышленниками для выполнения вредоносного кода внутри легитимного процесса в системах на базе Linux и Unix. Эта техника использует системный вызов ptrace, который обычно применяется для отладки. Подключившись к запущенному процессу, атакующие могут манипулировать его памятью, изменять значения регистров и внедрять произвольный код, эффективно перехватывая исполнение для запуска вредоносной полезной нагрузки в доверенном приложении.
Что такое ptrace?
Функция ptrace() - это системный вызов в Unix и Unix-подобных операционных системах, который позволяет одному процессу, контроллеру, манипулировать и наблюдать за внутренним состоянием другого процесса, трассировщика. Внедрение системного вызова Ptrace - это техника, которая заключается в использовании системного вызова ptrace() для подключения к уже запущенному процессу и модификации его памяти и регистров. Эта техника может быть использована для различных целей, включая внедрение кода в процесс для изменения его поведения.
Ptrace - это системный вызов, который позволяет одному процессу (трассировщику) управлять другим процессом (трассируемым) и наблюдать за его выполнением. Он используется отладчиками и другими инструментами для выполнения таких задач, как осмотр памяти и регистров процесса, модификация его выполнения и одномоментное выполнение его инструкций.
Ptrace реализован как набор системных вызовов в Unix-подобных операционных системах, таких как Linux. Он используется путем указания функции ptrace и набора аргументов, определяющих операцию, которую нужно выполнить, и процесс, который нужно отследить.
Некоторые общие операции, которые можно выполнить с помощью ptrace, включают:
- Чтение и запись памяти и регистров трассировщика
- Установка точек останова в коде трассировщика
- Одиночный переход по инструкциям трассировщика
- Присоединение к запущенному процессу и отсоединение от него
Ptrace - это мощный инструмент, который можно использовать для различных целей, включая отладку, обратную разработку и анализ вредоносного ПО. Злоумышленники также могут использовать его для проверки и модификации выполнения процессов в системе, что может быть использовано для обхода обнаружения и достижения стойкости.
Использование злоумышленниками системных вызовов Ptrace
Вот как атакующий может использовать системный вызов ptrace для инъекции кода:
- Присоединение к целевому процессу: Атакующий процесс использует ptrace с опцией PTRACE_ATTACH, чтобы присоединиться к целевому процессу. Это приводит к тому, что целевой процесс приостанавливает выполнение и становится отслеживаемым процессом атакующего.
- Ожидание остановки целевого процесса: атакующий процесс ожидает сигнала от целевого процесса, указывающего на то, что он остановлен и готов к трассировке. Обычно это делается путем прослушивания сигнала SIGSTOP.
- Подготовка к инъекции: Атакующий находит или выделяет участок памяти в адресном пространстве целевого процесса, куда будет внедрен вредоносный код (часто называемый шелл-кодом). Это может включать поиск существующих исполняемых областей памяти или выделение новой памяти с помощью ptrace для вызова системного вызова mmap в целевом процессе.
- Копирование шеллкода: Используя ptrace с операцией PTRACE_POKEDATA или PTRACE_POKETEXT, атакующий записывает шеллкод побайтно в выделенное пространство памяти целевого процесса.
- Установка указателя инструкции: Установив шелл-код, атакующий с помощью ptrace устанавливает регистр указателя инструкций (IP) (например, EIP на x86, RIP на x86_64) целевого процесса на адрес внедренного кода.
- Возобновление выполнения целевого процесса: После установки шеллкода и указателя инструкций атакующий возобновляет выполнение целевого процесса с помощью ptrace с опцией PTRACE_CONT, заставляя целевой процесс перейти к внедренному шеллкоду и выполнить его.
- Отсоединение от целевого процесса (если применимо): После выполнения кода и если дальнейшее взаимодействие с целевым процессом не требуется, атакующий процесс может использовать ptrace с опцией PTRACE_DETACH, чтобы отсоединиться от целевого процесса и позволить ему продолжить выполнение в обычном режиме.
Инъекция системных вызовов Ptrace - это мощный метод выполнения произвольного кода в контексте другого процесса, который может использоваться атакующими для манипулирования целевыми приложениями или шпионажа за ними, а также для запуска вредоносной полезной нагрузки, не требующей наличия двоичного файла на диске. Однако в современных дистрибутивах Linux существуют механизмы безопасности, такие как Yama и SELinux, которые позволяют ограничить использование ptrace для предотвращения отладки неавторизованными пользователями и, таким образом, смягчить этот вид атак.