Открыть сервис

Удалённое выполнение кода

Удалённое выполнение кода (англ. Remote Code Execution, RCE) — это класс кибератак или уязвимостей, позволяющий злоумышленнику выполнить произвольные программные команды или код на целевом компьютере, сервере или другом устройстве через сеть, без физического доступа к нему. RCE считается одной из наиболее опасных уязвимостей, так как даёт атакующему полный контроль над системой, включая доступ к данным, изменение конфигурации, установку вредоносного ПО и использование ресурсов для дальнейших атак.

История

Концепция удалённого выполнения кода возникла с развитием компьютерных сетей и распределённых систем. Первые задокументированные случаи относятся к 1970-м годам, когда с появлением ARPANET были обнаружены ошибки в протоколах, позволяющие выполнять команды на удалённых машинах. В 1988 году червь Морриса, использующий уязвимости в sendmail и finger, стал одним из первых массовых примеров RCE-атаки.

С развитием веб-технологий в 1990-х и 2000-х годах RCE-уязвимости стали массовыми. Особую известность получили уязвимости в веб-приложениях, такие как SQL-инъекции (позволяющие выполнять код на сервере баз данных) и уязвимости в популярных CMS (например, WordPress). В 2010-х годах с ростом интернета вещей (IoT) и облачных сервисов RCE-атаки распространились на встраиваемые системы и контейнеры.

Классификация

Уязвимости и атаки RCE классифицируются по нескольким признакам.

По способу эксплуатации

  • Прямое выполнение кода — атакующий отправляет вредоносный код, который интерпретатор или компилятор выполняет на стороне сервера. Примеры: eval-инъекции в PHP, Python, JavaScript (Node.js).
  • Инъекция команд — атакующий внедряет системные команды в параметры, которые передаются командной оболочке (shell). Например, через уязвимости в CGI-скриптах или в функциях system(), exec().
  • Переполнение буфера — классическая уязвимость на уровне памяти, при которой злоумышленник записывает данные за пределы выделенного буфера, перезаписывая адрес возврата или указатели функций, что позволяет выполнить произвольный код. Характерна для языков C/C++.
  • Десериализация — атака на приложения, которые десериализуют данные из ненадёжных источников (например, Java, Python, .NET). Злоумышленник создаёт вредоносный объект, который при десериализации выполняет код.
  • Уязвимости в протоколах и сервисах — ошибки в реализации сетевых протоколов (SSH, HTTP, RDP) или служб (SMB, DNS), позволяющие выполнить код на удалённой системе. Пример: уязвимость EternalBlue в SMB (CVE-2017-0144), использованная в атаках WannaCry.
  • Атаки через веб-интерфейсы — эксплуатация уязвимостей в веб-приложениях, таких как Server-Side Template Injection (SSTI), Local File Inclusion (LFI) с последующим выполнением кода, или уязвимости в загрузке файлов (например, загрузка PHP-скрипта на сервер).

По вектору атаки

  • Сетевая атака — злоумышленник отправляет специально сформированные пакеты по сети (например, через HTTP-запросы, TCP-соединения).
  • Атака через электронную почту — вредоносный код выполняется при открытии вложения или переходе по ссылке (например, макросы в документах Office).
  • Атака через веб-браузер — выполнение кода на стороне клиента (например, через уязвимости в браузере или плагинах), которое затем может быть использовано для атаки на сервер.
  • Физический доступ — хотя RCE предполагает удалённость, некоторые атаки требуют начального физического доступа (например, подключение к USB-порту), но затем выполняются удалённо.

По сложности эксплуатации

  • Простая эксплуатация — уязвимость, для которой существует готовый эксплойт (например, в Metasploit), не требующий глубоких знаний.
  • Сложная эксплуатация — требует написания собственного кода, обхода механизмов защиты (ASLR, DEP, sandbox) и понимания внутренней архитектуры системы.

Устройство и механизмы

RCE-атака обычно включает несколько этапов:

  1. Разведка — сбор информации о целевой системе: версии ПО, открытые порты, используемые технологии.
  2. Выявление уязвимости — поиск вектора, через который можно выполнить код. Например, обнаружение уязвимой версии веб-сервера или функции eval().
  3. Эксплуатация — отправка вредоносного payload (полезной нагрузки). Payload может быть написан на разных языках: shell-скрипты, код на Python, PHP, ассемблер, машинный код.
  4. Выполнение — payload выполняется на целевой системе. В зависимости от уязвимости, это может быть однократная команда (например, whoami) или запуск обратного shell (reverse shell), дающего интерактивный доступ.
  5. Закрепление — атакующий может установить бэкдор, создать нового пользователя, изменить конфигурацию для сохранения доступа после перезагрузки.
  6. Сокрытие следовудаление логов, изменение временных меток, маскировка вредоносного ПО.

Применение и значение

В кибербезопасности

RCE-уязвимости являются одной из главных целей как для злоумышленников, так и для специалистов по безопасности. Для защиты используются:

  • Регулярное обновление ПО — закрытие известных уязвимостей (патчи).
  • Входная валидация — проверка всех пользовательских данных на этапе ввода, экранирование спецсимволов.
  • Принцип наименьших привилегий — выполнение приложений с минимально необходимыми правами.
  • Изоляция (sandboxing) — выполнение кода в изолированной среде (контейнеры, виртуальные машины).
  • Механизмы защиты памяти — ASLR (Address Space Layout Randomization), DEP (Data Execution Prevention), stack canaries.
  • Web Application Firewall (WAF) — фильтрация вредоносных запросов.
  • Регулярные пентесты — поиск RCE-уязвимостей до того, как их найдут злоумышленники.

В разработке ПО

RCE-уязвимости часто возникают из-за ошибок программирования. Для их предотвращения разработчики должны:

  • Избегать использования функций, выполняющих код из строк (например, eval(), exec()).
  • Использовать безопасные библиотеки для работы с сериализацией.
  • Применять статический и динамический анализ кода.
  • Следовать стандартам безопасного кодирования (OWASP, CERT).

В киберпреступности

RCE-атаки используются для:

  • Кражи данных (финансовых, персональных, коммерческих).
  • Развёртывания программ-вымогателей (ransomware).
  • Создания ботнетов (сетей заражённых устройств для DDoS-атак).
  • Шпионажа и саботажа.
  • Майнинга криптовалют на заражённых системах.

Примеры известных RCE-уязвимостей

  • CVE-2014-0160 (Heartbleed) — уязвимость в OpenSSL, позволяющая читать память сервера, что в некоторых случаях приводило к RCE.
  • CVE-2017-0144 (EternalBlue) — уязвимость в протоколе SMB от Microsoft, использованная в атаках WannaCry и NotPetya.
  • CVE-2021-44228 (Log4Shell) — уязвимость в библиотеке Log4j для Java, позволяющая выполнить произвольный код через логирование. Затронула миллионы серверов по всему миру.
  • CVE-2022-30190 (Follina) — уязвимость в Microsoft Office, позволяющая выполнить код через вредоносный документ Word.
  • CVE-2023-34362 (MOVEit Transfer) — уязвимость в файловом менеджере MOVEit, использованная для массовых атак на государственные и коммерческие организации.

Критика и этические аспекты

RCE-уязвимости вызывают серьёзные этические и правовые вопросы. С одной стороны, их обнаружение и публичное раскрытие (full disclosure) помогают разработчикам быстрее исправлять ошибки. С другой стороны, публикация эксплойтов до выхода патча (zero-day) может быть использована злоумышленниками. В России действует законодательство, регулирующее оборот средств защиты информации и ответственность за неправомерный доступ к компьютерной информации (ст. 272 УК РФ). Организации, занимающиеся пентестами, обязаны получать письменное согласие владельца системы.

Источники

  • Официальная документация OWASP по инъекциям и удалённому выполнению кода.
  • База уязвимостей CVE (Common Vulnerabilities and Exposures).
  • Отчёты компаний по кибербезопасности (Kaspersky, Positive Technologies, Group-IB).
  • Учебные материалы по безопасному кодированию (CERT, SEI).
  • Статьи в журналах «Хакер» и «Безопасность информационных технологий».

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →