Введение

В компьютерной безопасности произвольное исполнение кода (ACE) – это возможность злоумышленника выполнять любые команды или код по своему выбору на целевой машине или в целевом процессе. Уязвимость, позволяющая произвольное исполнение кода, – это дефект в программном или аппаратном обеспечении, который допускает выполнение произвольного кода. Программа, предназначенная для эксплуатации такой уязвимости, называется эксплойтом для произвольного исполнения кода. Возможность инициировать произвольное исполнение кода по сети (особенно через глобальную сеть, такую как Интернет) часто называют удаленным исполнением кода (RCE или RCX). Произвольное исполнение кода означает, что при отправке на компьютер специально сформированных данных злоумышленник может заставить его выполнить любые действия. Несмотря на то, что эта конкретная уязвимость может не приводить к немедленным последствиям, исследователи обсуждают, свидетельствует ли она о склонности компьютеров к наличию уязвимостей, допускающих несанкционированное выполнение кода.

Методы

Произвольное исполнение кода обычно достигается путем получения контроля над указателем инструкции (например, через переход или ветвление) работающего процесса. Указатель инструкции указывает на следующую инструкцию в процессе, которая будет выполнена. Следовательно, контроль над значением указателя инструкции позволяет контролировать, какая инструкция будет выполнена следующей. Для выполнения произвольного кода многие эксплойты внедряют код в процесс (например, отправляя данные, которые сохраняются во входном буфере в оперативной памяти) и используют уязвимость для изменения указателя инструкции таким образом, чтобы он указывал на внедренный код. Затем внедренный код автоматически выполняется. Этот тип атаки использует тот факт, что большинство компьютеров (использующих архитектуру фон Неймана) не проводят четкого различия между кодом и данными, что позволяет замаскировать вредоносный код под безобидные входные данные. Многие современные процессоры имеют механизмы, затрудняющие это, например, бит запрета исполнения.

Комбинация с эскалацией привилегий

Само по себе произвольное исполнение кода предоставляет атакующему те же права, что и уязвимый целевой процесс. Например, эксплуатируя уязвимость в веб-браузере, злоумышленник может действовать от имени пользователя, выполняя такие действия, как изменение файлов на персональном компьютере или доступ к банковской информации, но не сможет выполнять системные действия (если только у пользователя нет соответствующих прав). Чтобы обойти это ограничение, после получения возможности выполнить произвольный код на целевой системе злоумышленник часто пытается использовать эксплойт для повышения привилегий, чтобы получить дополнительный контроль. Это может включать в себя доступ к ядру системы или к учетной записи администратора, SYSTEM или root. С повышенными или без них правами, эксплойты могут нанести серьезный ущерб или превратить компьютер в зомби, однако повышение привилегий помогает скрыть атаку от законного администратора системы.

Примеры

Любители ретроигр обнаружили уязвимости в классических видеоиграх, позволяющие им выполнять произвольный код. Обычно это достигается с помощью точной последовательности нажатий кнопок в инструменте для ускоренного прохождения (tool-assisted superplay), вызывающей переполнение буфера и позволяющей записывать данные в защищенную память. На Awesome Games Done Quick 2014 группа энтузиастов спидраннинга смогла запустить версии игр Pong и Snake внутри копии Super Mario World, используя переполнение буфера для записи произвольного кода в память. 12 июня 2018 года боснийский исследователь в области безопасности Жан Ив Авенард из Mozilla обнаружил уязвимость ACE в Windows 10. 1 мая 2018 года исследователь в области безопасности обнаружил уязвимость ACE в файловом архиваторе 7-Zip. PHP неоднократно подвергался уязвимостям ACE. 9 декабря 2021 года в популярной библиотеке логирования Log4j была обнаружена уязвимость удаленного выполнения кода (RCE) под названием "Log4Shell", затронувшая множество сервисов, включая iCloud, Minecraft: Java Edition и Steam, и получившая характеристику "самая масштабная и критическая уязвимость за последнее десятилетие".