RCE
Удаленное выполнение кода (RCE) позволяет злоумышленнику выполнить произвольный код на удаленном устройстве. Злоумышленник может достичь RCE несколькими различными способами, включая:
- Инъекционные атаки: многие различные типы приложений, например, SQL-запросы, используют данные, предоставленные пользователем, в качестве входных данных для команды. При атаке инъекции злоумышленник намеренно предоставляет неправильно оформленные данные, в результате чего часть его ввода интерпретируется как часть команды. Это позволяет злоумышленнику формировать команды, выполняемые на уязвимой системе, или выполнять на ней произвольный код.
- Атаки на десериализацию: приложения обычно используют сериализацию для объединения нескольких частей данных в одну строку, чтобы облегчить передачу или обмен данными. Специально отформатированный пользовательский ввод в сериализованных данных может быть интерпретирован программой десериализации как исполняемый код.
- Запись за пределы границ: приложения регулярно выделяют участки памяти фиксированного размера для хранения данных, включая данные, предоставленные пользователем. Если это распределение памяти выполнено неправильно, злоумышленник может разработать вход, который записывает данные за пределы выделенного буфера. Поскольку исполняемый код также хранится в памяти, данные, предоставленные пользователем, записанные в нужном месте, могут быть выполнены приложением.
Примеры уязвимого кода:
PHP
$user_input = $_POST['user_input'];
eval($user_input);
Этот код принимает вводимые пользователем данные из запроса POST, а затем использует eval() функция для выполнения его в виде PHP-кода. С тех пор как eval() если злоумышленник может выполнить любой допустимый PHP-код, он может предоставить вредоносный код в качестве входных данных для выполнения произвольных команд на сервере.
Java
Runtime.getRuntime().exec(request.getParameter("cmd"));
Этот код принимает пользовательский ввод из веб-запроса и передает его в exec() метод проведения Время выполнения класс без надлежащей проверки входных данных. Злоумышленник может предоставить специально созданный ввод для выполнения произвольных команд в системе.
C#
string cmd = Request.QueryString["cmd"];
System.Diagnostics.Process.Start("cmd.exe", cmd);
Этот код принимает вводимые пользователем данные из строки запроса, а затем использует Process.Start() способ выполнения команды в системе. Злоумышленник может ввести специально созданную команду в качестве входных данных для выполнения произвольных команд в системе.
Последствия RCE-атак
Некоторые из основных последствий атаки RCE включают:
- Первоначальный доступ
Атаки RCE обычно начинаются с уязвимости в общедоступном приложении, которая дает возможность выполнять команды на хостовой машине. Злоумышленники могут использовать это для получения первоначального доступа к устройству для установки вредоносного ПО или достижения других целей.
- Раскрытие информации
Атаки RCE могут быть использованы для установки вредоносного ПО для кражи данных или для прямого выполнения команд, которые извлекают и удаляют данные с уязвимого устройства.
- Отказ в обслуживании
Уязвимость RCE позволяет злоумышленнику выполнить код на системе, на которой установлено уязвимое приложение. Это может позволить им нарушить работу этого или других приложений в системе.