RCE (Remote Code Execution)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 19:20, 16 июня 2018.

RCE (англ. Remote Code Execution) – компьютерная уязвимость, при которой происходит удаленное выполнение кода на взламываемом компьютере, сервере и т.п. RCE является максимальной угрозой класса А1 по классификации OWASP. А также это гарантированный способ взлома сайтов и веб приложений. RCE - является одной из самых опасных уязвимостей.

Возможность удаленного внедрения кода в серверный скрипт в 100% случаев приводит к взлому ресурса. С помощью RCE злоумышленник сразу получает доступ к серверу атакуемого сайта, размещая на нем веб-шеллы, или любой другой вредоносный код. В практике встречались случаи, когда RCE эксплуатировали боевые скрипты, размещенные на хакерских серверах, которые отслеживали наличие вредоносной составляющей, вирусов шеллов и т.п. на сайте. Когда программисты сайта пытались удалить вредоносные скрипты с своих сайтов, они появлялись заново, в течении нескольких секунд. Фактически программисты атакуемых сайтов не успевали "отпустить клавишу" DELETE, как заражение сайта повторялось в удвоенном размере. Обычным удалением вирусов троянов и шеллов в таком случае не обойтись. Первоначально нужно найти и устранить уязвимость в коде, позволяющую эксплуатировать RCE (Remote code execution).

Возможность эксплуатации RCE возникает из за грубейших ошибок разработки сайта, отсутствия фильтрации передающих параметров, использование небезопасных функций и приемов программирования.

Пример уязвимого PHP скрипта

Файл vuln.php

<? 
eval($_GET['code']);
?>

Вызов скрипта Для вызова скрипта, вводим в поисковую строку следующий запрос: http://vulnserver.com/vuln.php?code=phpinfo();

Результат: Результатом является выполнение PHP кода, а именно команды phpinfo(), которая показывает информацию о версии php клиента, у установленного на сервере. Уязвимость RCE (Remote code execution) на сайте - это максимальная угроза для его безопасности.

Защита от RCE (удаленное выполнение кода на сервере)

Для защиты можно применять фильтрацию параметров, передающих данные в eval(); assert(); и т.д. Также, желательна проверка валидности запросов и данных в передающих параметрах[1].

SSH

В случае, если удаленный сервер имеет ssh, также возможно выполнение удаленного, но только при условии, что вам известен пароль или он отсутсвует, что бывает в случаях неграмотной настройки сервера. Для удаленного запуска команды на сервере по SSH нежно выполнить следующую команду: $ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР 'КОМАНДА' В большинстве случаем недостаточно удаленно запустить только одну команду по SSH. Намного чаще необходимо отправить сразу несколько команд на удаленный сервер, например, для сбора информации с целью инвентаризации и получить результат обратно. Запустить несколько команд на удаленном хосте по SSH можно следующим образом:

$ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР 'КОМАНДА1; КОМАНДА2; КОМАНДА3'

или

$ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР 'КОМАНДА1 | КОМАНДА2 | КОМАНДА3'

или

$ ssh ПОЛЬЗОВАТЕЛЬ@СЕРВЕР << EOF
КОМАНДА1
КОМАНДА2
КОМАНДА3
EOF

Пример

Узнайть версию ядра, количество ядер CPU и сколько всего RAM:

$ ssh root@192.168.1.1 << EOF
uname -a
lscpu  | grep "^CPU(s)"
grep -i memtotal /proc/meminfo
EOF

Примечания

  1. inSafety [Электронный ресурс]: RCE - Remote code execution / Дата обращения: 04.03.2017. Режим доступа: http://insafety.org/rce.php